Sparse Invaders Source - Macros.txt
From Retrosoftware
(Difference between revisions)
Neilb (Talk | contribs)
(New page: == Sparse Invaders Source - Macros.txt == ;------------------------------------------------------------------------------- ; Macros ... ; Written by Neil Beresford. ; ...)
Next diff →
Current revision
Sparse Invaders Source - Macros.txt
;------------------------------------------------------------------------------- ; Macros ... ; Written by Neil Beresford. ; ; Copyright 2008,2009 Neil Beresford ; ; This file is part of Sparse Invaders. ; Sparse Invaders is free software: you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation, either version 3 of the License, or ; (at your option) any later version. ; ; Sparse Invaders is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with Sparse Invaders. If not, see <http://www.gnu.org/licenses/>. ; ; ;------------------------------------------------------------------------------- ;------------------------------------------------------------------------------- ; Mode change ... ; A trashed ;------------------------------------------------------------------------------- .macro MODE LDA #$16 JSR oswrch LDA _1 JSR oswrch .macend ;------------------------------------------------------------------------------- .macro CURSOROFF LDA #10 STA $FE00 LDA #32 STA $FE01 .macend ;------------------------------------------------------------------------------- .macro WAIT_VBLANK LDA #19 jsr osbyte .macend ;------------------------------------------------------------------------------- ; PushRegs ; ;------------------------------------------------------------------------------- .macro PUSHREGS PHA ; preserve the registers TXA PHA TYA PHA .macend ;------------------------------------------------------------------------------- ; PopRegs ; ;------------------------------------------------------------------------------- .macro POPREGS PLA ; restore the regs TAY PLA TAX PLA .macend ;------------------------------------------------------------------------------- ;------------------------------------------------------------------------------- .macro CHECK_KEY ; checks the key, trashes the regs ... LDA #$81 LDX #0 LDY #0 JSR osbyte CPY #0 .macend ;------------------------------------------------------------------------------- ; Change background colour ; _1 Colour to change to ; all regs trashed... ; ;------------------------------------------------------------------------------- .macro BORDERCOLOUR lda #155 ldx #_1 jsr $fff4 .macend ;------------------------------------------------------------------------------- ; Store16bit - _1 Value to be stored ; _2 Place to store ; A trashed ; ;------------------------------------------------------------------------------- .macro STORE16BIT LDA _1 STA _2 LDA _1+1 STA _2+1 .macend ;------------------------------------------------------------------------------- ; Add16bit - _1 Value 1 ; _2 Value 2 ; _3 Result ; A trashed and also carry ;------------------------------------------------------------------------------- .macro ADD16BIT CLC ;Ensure carry is clear LDA _1+0 ;Add the two least significant bytes ADC _2+0 STA _3+0 ;... and store the result LDA _1+1 ;Add the two most significant bytes ADC _2+1 ;... and any propagated carry bit STA _3+1 ;... and store the result .macend ;------------------------------------------------------------------------------- ; Sub16bit - _1 Value 1 ; _2 Value 2 ; _3 Result ; A trashed and also carry ;------------------------------------------------------------------------------- .macro SUB16BIT SEC ;Ensure carry is clear LDA _1+0 ;Sub the two most significant bytes SBC _2+0 STA _3+0 ;... and store the result LDA _1+1 ;sub the two least significant bytes SBC _2+1 ;... and any propagated carry bit STA _3+1 ;... and store the result .macend ;------------------------------------------------------------------------------- ; Multiply by 8 the 16bit contents in ; ; ;------------------------------------------------------------------------------- .macro MUL8 CLC LDA _1 ASL ROL _1+1 ASL ROL _1+1 ASL ROL _1+1 STA _1 .macend ;------------------------------------------------------------------------------- ; Multiply by 6 A and store in _1 ; ; ;------------------------------------------------------------------------------- .macro MUL6 ASL STA _1 ASL CLC ADC _1 STA _1 .macend ;------------------------------------------------------------------------------- ; Multiply by 3 A and store in _1 ; ; ;------------------------------------------------------------------------------- .macro MUL3 STA _1 ASL CLC ADC _1 STA _1 .macend ;------------------------------------------------------------------------------- ; Multiply by 5 A and store in _1 ; ; ;------------------------------------------------------------------------------- .macro MUL5 STA _1 ASL ASL CLC ADC _1 STA _1 .macend ;------------------------------------------------------------------------------- ; Multiply by 32 the 16bit contents in ; ; ;------------------------------------------------------------------------------- .macro MUL32 CLC LDA _1 ASL ROL _1+1 ASL ROL _1+1 ASL ROL _1+1 ASL ROL _1+1 ASL ROL _1+1 STA _1 .macend ;------------------------------------------------------------------------------- ; Divide by 6 A and store in _1 ; ; ;------------------------------------------------------------------------------- .macro DIV6 LSR STA _1 LSR SEC SBC _1 STA _1 .macend ;------------------------------------------------------------------------------- ; Multipy 8bit by 8, then add to 16bit address ; uses scratch reg temp($76) for uppper 8bits in ; multiply by 8 ; ;------------------------------------------------------------------------------- .macro MUL8ADDTOADDRESS LDA #0 ; multiply by 8 STA TEMP CLC ASL _1 ROL TEMP ASL _1 ROL TEMP ASL _1 ROL TEMP LDA _1 ; now the addition to the 16bit CLC ADC _2 STA _2 LDA TEMP ADC _2+1 STA _2+1 .macend ;------------------------------------------------------------------------------- ; Add A to 16bit value ... ;------------------------------------------------------------------------------- .macro ADDTO16BIT CLC ADC _1 STA _1 LDA _1+1 ADC #0 STA _1+1 .macend ;------------------------------------------------------------------------------- ; End of Macros ;-------------------------------------------------------------------------------