AppleIIAsm-Collection/source/disk3_arrays/T.APUT82.SUB.MIN

159 lines
3.3 KiB
Plaintext
Raw Normal View History

APUT82
PLA
STA RETADR
PLA
STA RETADR+1
PLA
STA :YIDX ; Y INDEX
DEC :YIDX
PLA
STA :XIDX ; X INDEX
DEC :XIDX
PLA
STA ADDR4 ; ADDRESS OF ARRAY
PLA
STA ADDR4+1
PLA
STA ADDR3 ; ADDRESS OF DATA
PLA ; TO BE COPIED
STA ADDR3+1
LDY #2
LDA (ADDR4),Y
STA :ESIZE
STA :MCAND
LDA #0
STA :MCAND+1
LDY #0
LDA (ADDR4),Y
STA :XLEN
INY
LDA (ADDR4),Y
STA :YLEN
LDY #0
LDA ERRCTRL
CMP #1
BEQ :CHKERR
JMP :ERREND
:CHKERR
LDA :XIDX ; IF X > MAX LEN
CMP :XLEN
BCS :XOVF
JMP :ERRCONT1
:XOVF
_ERR :E_SID;:E_XOVF;:E_DUMP;:XIDX;#15
:ERRCONT1
LDA :YIDX ; IF Y > MAX LEN
CMP :YLEN
BCS :YOVF
JMP :ERRCONT2
:YOVF
_ERR :E_SID;:E_YOVF;:E_DUMP;:XIDX;#15
:ERRCONT2
LDA :XIDX ; IF INDEX IS 0, ERR
CMP #255
BEQ :XOVF
:ERRCONT3
LDA :YIDX
CMP #255
BEQ :YOVF
:ERREND
LDA #0
TAY
STY SCRATCH
BEQ :ENTLP
:DOADD
CLC
ADC :YIDX
TAX
TYA
ADC SCRATCH
TAY
TXA
:LP
ASL :YIDX
ROL SCRATCH
:ENTLP
LSR :YLEN
BCS :DOADD
BNE :LP
STX :MLIER
STY :MLIER+1
CLC
LDA :MLIER
ADC :XIDX
STA :MLIER
BCC :CONTADD
LDA :MLIER+1
ADC #1
STA :MLIER+1
:CONTADD
LDA #0
STA :PROD+2
STA :PROD+3
LDX #$10
:SHIFTR LSR :MLIER+1
ROR :MLIER
BCC :ROTR
LDA :PROD+2
CLC
ADC :MCAND
STA :PROD+2
LDA :PROD+3
ADC :MCAND+1
:ROTR
ROR
STA :PROD+3
ROR :PROD+2
ROR :PROD+1
ROR :PROD
DEX
BNE :SHIFTR
CLC
INC :PROD ; INCREASE BY 3
INC :PROD
INC :PROD
BCC :NOCAR
INC :PROD+1
:NOCAR
CLC
LDA :PROD
ADC ADDR4
STA :PROD
LDA :PROD+1
ADC ADDR4+1
STA :PROD+1
LDA :PROD
LDY :PROD
LDX :PROD+1
STY ADDR2
STX ADDR2+1
LDY #0
LDX #0
:CLP
LDA (ADDR3),Y
STA (ADDR2),Y
INY
CPY :ESIZE
BNE :CLP
LDA RETADR+1
PHA
LDA RETADR
PHA
LDX ADDR2+1
LDY ADDR2
LDA :ESIZE
RTS
:ESIZE DS 1
:XIDX DS 1
:YIDX DS 1
:MCAND DS 2
:MLIER DS 2
:PROD DS 4
:XLEN DS 1
:YLEN DS 1
:E_SID ASC "APUT82 (PUT82 MACRO)",00
:E_DUMP ASC ":XIDX(1) :YIDX(1) :MCAND(2) :MLIER(2)"
ASC ":PROD(4) :XLEN(1) :YLEN(1)",00
:E_XOVF ASC "OUT OF BOUNDS! X > MAXIMUM OR IS 0.",00
:E_YOVF ASC "OUT OF BOUNDS! Y > MAX OR IS 0.",00