;Commander X16 ABI Registers Assembly Language Routines ;Zero Page System Variables - x16emu Release 34 Memory Map ABIPTR EQU $00 ;Pointer for ABI Functions R0 EQU $02 ;ABI Register 0 R0L EQU $02 ;ABI Register 0 LSB R0H EQU $03 ;ABI Register 0 MSB R1 EQU $04 ;ABI Register 1 R1L EQU $04 ;ABI Register 1 LSB R1H EQU $05 ;ABI Register 1 MSB R2 EQU $06 ;ABI Register 2 R2L EQU $06 ;ABI Register 2 LSB R2H EQU $07 ;ABI Register 2 MSB R3 EQU $08 ;ABI Register 3 R3L EQU $08 ;ABI Register 3 LSB R3H EQU $09 ;ABI Register 3 MSB R4 EQU $0A ;ABI Register 4 R4L EQU $0A ;ABI Register 4 LSB R4H EQU $0B ;ABI Register 4 MSB R5 EQU $0C ;ABI Register 5 R5L EQU $0C ;ABI Register 5 LSB R5H EQU $0D ;ABI Register 5 MSB R6 EQU $0E ;ABI Register 6 R6L EQU $0E ;ABI Register 6 LSB R6H EQU $0F ;ABI Register 6 MSB R7 EQU $10 ;ABI Register 7 R7L EQU $10 ;ABI Register 7 LSB R7H EQU $11 ;ABI Register 7 MSB R8 EQU $12 ;ABI Register 8 R8L EQU $12 ;ABI Register 8 LSB R8H EQU $13 ;ABI Register 8 MSB R9 EQU $14 ;ABI Register 9 R9L EQU $14 ;ABI Register 9 LSB R9H EQU $15 ;ABI Register 9 MSB R10 EQU $16 ;ABI Register 10 R10L EQU $16 ;ABI Register 10 LSB R10H EQU $17 ;ABI Register 10 MSB R11 EQU $18 ;ABI Register 11 R11L EQU $18 ;ABI Register 11 LSB R11H EQU $19 ;ABI Register 11 MSB R12 EQU $1A ;ABI Register 12 R12L EQU $1A ;ABI Register 12 LSB R12H EQU $1B ;ABI Register 12 MSB R13 EQU $1C ;ABI Register 13 R13L EQU $1C ;ABI Register 13 LSB R13H EQU $1D ;ABI Register 13 MSB R14 EQU $1E ;ABI Register 14 R14L EQU $1E ;ABI Register 14 LSB R14H EQU $1F ;ABI Register 14 MSB R15 EQU $20 ;ABI Register 15 R15L EQU $20 ;ABI Register 15 LSB R15H EQU $21 ;ABI Register 15 MSB ;Read ABI Registers into Array or Struct GETABI: STX ABIPTR ;Store Array Address STY ABIPTR+1 TAY ;Copy Array Size into Y Register GETABY: DEY ;Decrement Counter BMI .GETABX ;If Not Negative LDA R0,Y ;Get Byte from ABI Register STA (ABIPTR),Y ;And write to ABI Register BRA GETABY ;and Loop .GETABX RTS ;Return ABI Register Contents GETABR: TAX ;Copy Register ;Write Array or Struct to ABI Registers SETABI: STX ABIPTR ;Store Array Address STY ABIPTR+1 TAY ;Copy Array Size into Y Register SETABY: DEY ;Decrement Counter BMI .SETABX ;If Not Negative LDA (ABIPTR),Y ;Get Byte from Array or Struct STA R0,Y ;Store in ABI Register BRA SETABY ;and Loop .SETABX RTS