mirror of
https://github.com/erkyrath/infocom-zcode-terps.git
synced 2026-01-11 23:43:24 +00:00
176 lines
3.0 KiB
Plaintext
176 lines
3.0 KiB
Plaintext
|
|
SBTTL "--- ITERATION STUFF ---"
|
|
;--------------------------------------------
|
|
; ITERATIONS
|
|
; EXECUTE THE ITERATION TABLE AT [ARG2]
|
|
; TEST FOR INPUT AFTER EACH ENTRY IS DONE AND
|
|
; -------------------------------------------
|
|
|
|
ITRATE: LDA ARG2+HI
|
|
STA ARG3+HI ; POINT ARG3 AT TABLE
|
|
LDA ARG2+LO
|
|
STA ARG3+LO
|
|
|
|
LDA #00 ; SET OFFSET INTO TABLE=0
|
|
STA ARG4+HI
|
|
STA ARG4+LO
|
|
JSR ICALC ; POINT [I] AT TABLE
|
|
|
|
LDA (I),Y ; NUMBER OF ENTRIES
|
|
STA ITICN
|
|
INY
|
|
LDA (I),Y ; ENTRY TO START WITH
|
|
STA ITPNT ; (NORMALLY ENTRY 1)
|
|
|
|
INC ARG4+LO ; POINT AT FISRT WORD IN FIRST ENTRY
|
|
|
|
LDX #1
|
|
ITLP2: CPX ITPNT ; SKIP ENTRIES 1 TO ITPNT
|
|
BEQ ITLOOP
|
|
JSR NXTENT
|
|
INX
|
|
BNE ITLP2 ; BRA
|
|
|
|
ITLOOP: JSR ICALC ; SET (I) CORECTLY
|
|
|
|
LDA (I),Y ; POINT IADR1 AT "HEADER"
|
|
STA IADR1+HI
|
|
STY IADR10
|
|
INY
|
|
LDA (I),Y
|
|
STA IADR1+LO
|
|
|
|
LDY #7 ; CURRENT ITERATION
|
|
LDA (I),Y
|
|
PHA ; SAVE
|
|
TAX
|
|
INX ; TAKE CARE OF SETING FOR NEXT ITERATION
|
|
|
|
LDY #9 ; NUMBER OF ITERATIONS
|
|
CMP (I),Y
|
|
BNE ITSKP2
|
|
LDX #1 ; RESTET TO FIRST ITERATION
|
|
ITSKP2: TXA
|
|
LDY #7
|
|
STA (I),Y ; NEXT ITERATION
|
|
|
|
INY ;=8
|
|
LDA (I),Y ; BSET
|
|
STA BSET
|
|
|
|
LDY #10 ; WIDTH
|
|
LDA (I),Y
|
|
STA IX1
|
|
TAX
|
|
INY
|
|
LDA (I),Y ; HEIGHT
|
|
STA IY1
|
|
TAY
|
|
JSR MULXY ; FIND WIDTH*HEIGHT
|
|
|
|
PLA ; RESTORE CURRENT ITERATION
|
|
TAY
|
|
ITLP3: DEY ; ZERO ALIGN FIRST TIME THRU/ THEN JUST DEX
|
|
BEQ ITSKP3
|
|
LDA MUH ; ADD LENGTH OF ICON (WIDTH*HEIGTH)
|
|
LDX MUL
|
|
JSR ADDIA1
|
|
JMP ITLP3
|
|
|
|
ITSKP3: TYA ;=0
|
|
LDX #4
|
|
JSR ADDIA1 ; SKIP 4 HEADER BYTES
|
|
|
|
LDY #2 ; =2
|
|
LDA (I),Y ; ICON XPOS
|
|
STA ARG1+HI
|
|
INY ; =3
|
|
LDA (I),Y
|
|
STA ARG1+LO
|
|
INY ; =4
|
|
LDA (I),Y ; ICON YPOS
|
|
STA ARG2+HI
|
|
INY ; =5
|
|
LDA (I),Y
|
|
STA ARG2+LO
|
|
INY ; =6
|
|
LDA (I),Y ; NEGATE
|
|
ITSKP4: STA NEGATE
|
|
|
|
LDA #00
|
|
STA MSKFLG ; DISABLE MASKING
|
|
|
|
JSR ITENT ; ENTER DRAW ROUTINE
|
|
|
|
JSR NXTENT ; POINT ARG4 AT NEXT ENTRY
|
|
|
|
LDX ITPNT ; ARE WE DONE YET?
|
|
CPX ITICN
|
|
BEQ ITEXI ; YES WE ARE DONE
|
|
|
|
INC ITPNT ; OTHERWISE POINT TO NEXT ENTRY
|
|
|
|
LDA VALUE+HI ; IF INPUT WAS CALLED WITH A NEG INT
|
|
BMI NONSNS ; DO NOT LOOK FOR INPUT
|
|
|
|
JSR SENSE ; DO WE HAVE AN INPUT
|
|
CMP #%10001111
|
|
BNE ITSKP5 ; GO HANDLE AN INPUT
|
|
NONSNS: JMP ITLOOP ; OTHERWISE DO NEXT ENTRY
|
|
|
|
ITSKP5: PHA ; SAVE INPUT
|
|
LDA #00
|
|
STA ARG4+HI
|
|
STA ARG4+LO ; POINT AT TABLE HEADER
|
|
JSR ICALC
|
|
INY ; =1
|
|
LDA ITPNT ; SAVE STATUS OF HOW FAR WE GOT IN DOING
|
|
STA (I),Y ; THE TABLE
|
|
|
|
PLA ; RESTORE SENSE
|
|
JMP PUTBYT ; RETURN SENSE
|
|
|
|
ITEXI: LDA #00
|
|
STA ARG4+HI
|
|
STA ARG4+LO
|
|
JSR ICALC ; POINT TO TABLE HEADER
|
|
INY ; =1
|
|
TYA
|
|
STA (I),Y
|
|
JMP NOIT
|
|
|
|
|
|
|
|
;-----------------------------
|
|
; SKIP 6 WORDS (1 TABLE ENTRY)
|
|
;-----------------------------
|
|
|
|
NXTENT: LDA #6 ; ADD 6 TO ARG4
|
|
CLC
|
|
ADC ARG4+LO
|
|
STA ARG4+LO
|
|
BCC NEXI
|
|
INC ARG4+HI
|
|
NEXI: RTS
|
|
|
|
;-----------------------------------------------------------
|
|
; ICALC POINTS [I] AT THE RAM ADDRESS OF THE TABLE,OFFSET OF
|
|
; ARG3,ARG4
|
|
; AND GENERATES A PURITY ERROR IF [I] POINTS AT PURE CODE.
|
|
;
|
|
; EXITS: <Y>=0
|
|
;------------------------------------------------------------
|
|
|
|
ICALC: LDY #00
|
|
LDA ARG4+LO
|
|
CLC
|
|
ADC ARG3+LO
|
|
STA I+LO
|
|
LDA ARG4+HI
|
|
ADC ARG3+HI
|
|
JMP ICENT ;ENTRY IN PCALC
|
|
|
|
|
|
END
|
|
|