gigatron/rom/Contrib/at67/gbas/runtime/macros_ROMv5a.i
2025-01-28 19:17:01 +03:00

690 lines
11 KiB
OpenEdge ABL

%MACRO LoopCounterTo1 _counter _label
LD _counter
SUBI 0x01
ST _counter
BGT _label
%ENDM
%MACRO LoopCounterTo0 _counter _label
LD _counter
SUBI 0x01
ST _counter
BGE _label
%ENDM
%MACRO LoopCounter _counter _label
LD _counter
SUBI 0x01
ST _counter
BNE _label
%ENDM
%MACRO LoopCounter1 _counter _label
LD _counter
SUBI 0x01
ST _counter
BGE _label
%ENDM
%MACRO LutPeek _lut _index
LDWI _lut
DEEK
ADDW _index
PEEK
%ENDM
%MACRO LutDeek _lut _index _scratch
LDWI _lut
DEEK
STW _scratch
LDW _index
LSLW
ADDW _scratch
DEEK
%ENDM
%MACRO ForNextInc _var _label _end
INC _var
LD _var
SUBI _end
BLE _label
%ENDM
%MACRO ForNextDec _var _label _end
LDW _var
SUBI 1
STW _var
SUBI _end
BGE _label
%ENDM
%MACRO ForNextDecZero _var _label
LDW _var
SUBI 1
STW _var
BGE _label
%ENDM
%MACRO ForNextFarDecZero _var _label
LDW _var
SUBI 1
STW _var
BLT _label_ + 3
_label_ CALLI _label
%ENDM
%MACRO ForNextAdd _var _label _end _step
LDW _var
ADDI _step
STW _var
SUBI _end
BLE _label
%ENDM
%MACRO ForNextSub _var _label _end _step
LDW _var
SUBI _step
STW _var
SUBI _end
BGE _label
%ENDM
%MACRO ForNextVarAdd _var _label _vEnd _vStep
LDW _var
ADDW _vStep
STW _var
SUBW _vEnd
BLE _label
%ENDM
%MACRO ForNextVarSub _var _label _vEnd _vStep
LDW _var
SUBW _vStep
STW _var
SUBW _vEnd
BGE _label
%ENDM
%MACRO ForNextFarInc _var _label _end
INC _var
LD _var
SUBI _end
BGT _label_ + 3
_label_ CALLI _label
%ENDM
%MACRO ForNextFarDec _var _label _end
LDW _var
SUBI 1
STW _var
SUBI _end
BLT _label_ + 3
_label_ CALLI _label
%ENDM
%MACRO ForNextFarAdd _var _label _end _step
LDW _var
ADDI _step
STW _var
SUBI _end
BGT _label_ + 3
_label_ CALLI _label
%ENDM
%MACRO ForNextFarSub _var _label _end _step
LDW _var
SUBI _step
STW _var
SUBI _end
BLT _label_ + 3
_label_ CALLI _label
%ENDM
%MACRO ForNextFarVarAdd _var _label _vEnd _vStep
LDW _var
ADDW _vStep
STW _var
SUBW _vEnd
BGT _label_ + 3
_label_ CALLI _label
%ENDM
%MACRO ForNextFarVarSub _var _label _vEnd _vStep
LDW _var
SUBW _vStep
STW _var
SUBW _vEnd
BLT _label_ + 3
_label_ CALLI _label
%ENDM
%MACRO Return
POP
RET
%ENDM
%MACRO GotoNumeric
CALLI gotoNumericLabel
%ENDM
%MACRO GosubNumeric
CALLI gosubNumericLabel
%ENDM
%MACRO ResetVideoTable
CALLI resetVideoTable
%ENDM
%MACRO ResetVideoFlags
CALLI resetVideoFlags
%ENDM
%MACRO ClearScreen
CALLI clearScreen
%ENDM
%MACRO ClearRect
CALLI clearRect
%ENDM
%MACRO ClearVertBlinds
CALLI clearVertBlinds
%ENDM
%MACRO AtTextCursor
CALLI atTextCursor
%ENDM
%MACRO Input
CALLI input
%ENDM
%MACRO NewLine
CALLI newLineScroll
%ENDM
%MACRO PrintChr _chr
LDI _chr
CALLI printChr
%ENDM
%MACRO PrintAcChr
CALLI printChr
%ENDM
%MACRO PrintVarChr _var
LD _var
CALLI printChr
%ENDM
%MACRO PrintSpc
CALLI printSpc
%ENDM
%MACRO PrintHex
CALLI printHex
%ENDM
%MACRO PrintString _str
LDWI _str
CALLI printText
%ENDM
%MACRO PrintAcString
CALLI printText
%ENDM
%MACRO PrintVarString _var
LDW _var
CALLI printText
%ENDM
%MACRO PrintAcLeft
CALLI printLeft
%ENDM
%MACRO PrintAcRight
CALLI printRight
%ENDM
%MACRO PrintAcMid
CALLI printMid
%ENDM
%MACRO PrintAcLower
CALLI printLower
%ENDM
%MACRO PrintAcUpper
CALLI printUpper
%ENDM
%MACRO PrintInt16 _int
LDWI _int
CALLI printInt16
%ENDM
%MACRO PrintAcInt16
CALLI printInt16
%ENDM
%MACRO PrintVarInt16 _var
LDW _var
CALLI printInt16
%ENDM
%MACRO ReadIntVar
CALLI readIntVar
%ENDM
%MACRO ReadStrVar
CALLI readStrVar
%ENDM
%MACRO StringChr
CALLI stringChr
%ENDM
%MACRO StringSpc
STW strAddr
CALLI stringSpc
%ENDM
%MACRO StringHex
STW strAddr
CALLI stringHex
%ENDM
%MACRO StringCopy
CALLI stringCopy
%ENDM
%MACRO StringCmp
CALLI stringCmp
%ENDM
%MACRO StringConcat
CALLI stringConcat
%ENDM
%MACRO StringConcatLut
CALLI stringConcatLut
%ENDM
%MACRO StringLeft
CALLI stringLeft
%ENDM
%MACRO StringRight
CALLI stringRight
%ENDM
%MACRO StringMid
CALLI stringMid
%ENDM
%MACRO StringLower
STW strDstAddr
CALLI stringLower
%ENDM
%MACRO StringUpper
STW strDstAddr
CALLI stringUpper
%ENDM
%MACRO StringInt
CALLI stringInt
%ENDM
%MACRO IntegerStr
CALLI integerStr
%ENDM
%MACRO Absolute
CALLI absolute
%ENDM
%MACRO Sign
CALLI sign
%ENDM
%MACRO IntMin
CALLI integerMin
%ENDM
%MACRO IntMax
CALLI integerMax
%ENDM
%MACRO IntClamp
CALLI integerClamp
%ENDM
%MACRO Rand
CALLI rand16bit
%ENDM
%MACRO RandMod
STW mathY
CALLI randMod16bit
%ENDM
%MACRO ShiftLeft4bit
CALLI shiftLeft4bit
%ENDM
%MACRO ShiftLeft8bit
CALLI shiftLeft8bit
%ENDM
%MACRO ShiftRight1bit
CALLI shiftRight1bit
%ENDM
%MACRO ShiftRight2bit
CALLI shiftRight2bit
%ENDM
%MACRO ShiftRight3bit
CALLI shiftRight3bit
%ENDM
%MACRO ShiftRight4bit
CALLI shiftRight4bit
%ENDM
%MACRO ShiftRight5bit
CALLI shiftRight5bit
%ENDM
%MACRO ShiftRight6bit
CALLI shiftRight6bit
%ENDM
%MACRO ShiftRight7bit
CALLI shiftRight7bit
%ENDM
%MACRO ShiftRight8bit
CALLI shiftRight8bit
%ENDM
%MACRO ShiftRightSgn1bit
CALLI shiftRightSgn1bit
%ENDM
%MACRO ShiftRightSgn2bit
CALLI shiftRightSgn2bit
%ENDM
%MACRO ShiftRightSgn3bit
CALLI shiftRightSgn3bit
%ENDM
%MACRO ShiftRightSgn4bit
CALLI shiftRightSgn4bit
%ENDM
%MACRO ShiftRightSgn5bit
CALLI shiftRightSgn5bit
%ENDM
%MACRO ShiftRightSgn6bit
CALLI shiftRightSgn6bit
%ENDM
%MACRO ShiftRightSgn7bit
CALLI shiftRightSgn7bit
%ENDM
%MACRO ShiftRightSgn8bit
CALLI shiftRightSgn8bit
%ENDM
%MACRO ScanlineMode
CALLI scanlineMode
%ENDM
%MACRO WaitVBlanks
CALLI waitVBlanks
%ENDM
%MACRO WaitVBlank
CALLI waitVBlank
%ENDM
%MACRO ReadPixel
LDW drawPixel_xy
CALLI readPixel
%ENDM
%MACRO DrawPixel
LDW drawPixel_xy
CALLI drawPixel
%ENDM
%MACRO DrawLine
CALLI drawLine
%ENDM
%MACRO DrawVTLine
CALLI drawVTLine
%ENDM
%MACRO DrawHLine
CALLI drawHLine
%ENDM
%MACRO DrawVLine
CALLI drawVLine
%ENDM
%MACRO DrawCircle
CALLI drawCircle
%ENDM
%MACRO DrawCircleF
CALLI drawCircleF
%ENDM
%MACRO DrawRect
CALLI drawRect
%ENDM
%MACRO DrawRectF
CALLI drawRectF
%ENDM
%MACRO DrawPoly
CALLI drawPoly
%ENDM
%MACRO DrawPolyRel
CALLI drawPolyRel
%ENDM
%MACRO SetPolyRelFlipX
CALLI setPolyRelFlipX
%ENDM
%MACRO SetPolyRelFlipY
CALLI setPolyRelFlipY
%ENDM
%MACRO AtLineCursor
CALLI atLineCursor
%ENDM
%MACRO SetMidiStream
STW midiId
CALLI setMidiStream
%ENDM
%MACRO PlayMidi
STW midiStream
CALLI resetMidi
%ENDM
%MACRO PlayMidiV
STW midiStream
CALLI resetMidi
%ENDM
%MACRO GetMidiNote
CALLI midiGetNote
%ENDM
%MACRO PlayMusic
STW musicStream
CALLI resetMusic
CALLI playMusic
%ENDM
%MACRO GetMusicNote
CALLI musicGetNote
%ENDM
%MACRO TimeString
CALLI timeString
%ENDM
%MACRO DrawSprite
CALLI drawSprite
%ENDM
%MACRO DrawSpriteX
CALLI drawSpriteX
%ENDM
%MACRO DrawSpriteY
CALLI drawSpriteY
%ENDM
%MACRO DrawSpriteXY
CALLI drawSpriteXY
%ENDM
%MACRO GetSpriteLUT
CALLI getSpriteLUT
%ENDM
%MACRO SoundAll
CALLI soundAll
%ENDM
%MACRO SoundAllOff
CALLI soundAllOff
%ENDM
%MACRO SoundOff
CALLI soundOff
%ENDM
%MACRO SoundOn
CALLI soundOn
%ENDM
%MACRO SoundOnV
CALLI soundOnV
%ENDM
%MACRO SoundMod
CALLI soundMod
%ENDM
%MACRO BcdAdd
CALLI bcdAdd
%ENDM
%MACRO BcdSub
CALLI bcdSub
%ENDM
%MACRO BcdInt
CALLI bcdInt
%ENDM
%MACRO BcdCmp
CALLI bcdCmp
%ENDM
%MACRO BcdCpy
CALLI bcdCpy
%ENDM
%MACRO JumpFalse _label id
BNE _id_ + 3 ; unique id is used as an internal macro label
_id_ CALLI _label
%ENDM
%MACRO JumpEQ _label id
BEQ _id_ + 3
_id_ CALLI _label
%ENDM
%MACRO JumpNE _label id
BNE _id_ + 3
_id_ CALLI _label
%ENDM
%MACRO JumpLE _label id
BLE _id_ + 3
_id_ CALLI _label
%ENDM
%MACRO JumpGE _label id
BGE _id_ + 3
_id_ CALLI _label
%ENDM
%MACRO JumpLT _label id
BLT _id_ + 3
_id_ CALLI _label
%ENDM
%MACRO JumpGT _label id
BGT _id_ + 3
_id_ CALLI _label
%ENDM
%MACRO CopyBytes
CALLI copyBytes
%ENDM
%MACRO CopyWords
CALLI copyWords
%ENDM
%MACRO ResetVars
CALLI resetVars
%ENDM
; Can't use CALLI as this code can be run on ROM's < ROMv5a
%MACRO RomCheck
LDWI romCheck
CALL giga_vAC
%ENDM
%MACRO RomExec
CALLI romExec
%ENDM
%MACRO RomRead
STW romReadAddr
CALLI romRead
%ENDM
%MACRO Initialise
LDWI 0x0F20
STW fgbgColour ; yellow on blue
LDI ENABLE_SCROLL_BIT
STW miscFlags ; reset flags
LDI 0
STW midiStream ; reset MIDI
CALLI resetVideoFlags
%ENDM