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

923 lines
16 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_ + 2
LDWI _label
_label_ CALL giga_vAC
%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_ + 2
LDWI _label
_label_ CALL giga_vAC
%ENDM
%MACRO ForNextFarDec _var _label _end
LDW _var
SUBI 1
STW _var
SUBI _end
BLT _label_ + 2
LDWI _label
_label_ CALL giga_vAC
%ENDM
%MACRO ForNextFarAdd _var _label _end _step
LDW _var
ADDI _step
STW _var
SUBI _end
BGT _label_ + 2
LDWI _label
_label_ CALL giga_vAC
%ENDM
%MACRO ForNextFarSub _var _label _end _step
LDW _var
SUBI _step
STW _var
SUBI _end
BLT _label_ + 2
LDWI _label
_label_ CALL giga_vAC
%ENDM
%MACRO ForNextFarVarAdd _var _label _vEnd _vStep
LDW _var
ADDW _vStep
STW _var
SUBW _vEnd
BGT _label_ + 2
LDWI _label
_label_ CALL giga_vAC
%ENDM
%MACRO ForNextFarVarSub _var _label _vEnd _vStep
LDW _var
SUBW _vStep
STW _var
SUBW _vEnd
BLT _label_ + 2
LDWI _label
_label_ CALL giga_vAC
%ENDM
%MACRO Return
POP
RET
%ENDM
%MACRO GotoNumeric
LDWI gotoNumericLabel
CALL giga_vAC
%ENDM
%MACRO GosubNumeric
LDWI gosubNumericLabel
CALL giga_vAC
%ENDM
%MACRO ResetVideoTable
LDWI resetVideoTable
CALL giga_vAC
%ENDM
%MACRO ResetVideoFlags
LDWI resetVideoFlags
CALL giga_vAC
%ENDM
%MACRO ClearScreen
LDWI clearScreen
CALL giga_vAC
%ENDM
%MACRO ClearRect
LDWI clearRect
CALL giga_vAC
%ENDM
%MACRO ClearVertBlinds
LDWI clearVertBlinds
CALL giga_vAC
%ENDM
%MACRO AtTextCursor
LDWI atTextCursor
CALL giga_vAC
%ENDM
%MACRO Input
STW inpLutAddr
LDWI input
CALL giga_vAC
%ENDM
%MACRO NewLine
LDWI newLineScroll
CALL giga_vAC
%ENDM
%MACRO PrintChr _chr
LDI _chr
ST textChr
LDWI printChr
CALL giga_vAC
%ENDM
%MACRO PrintAcChr
ST textChr
LDWI printChr
CALL giga_vAC
%ENDM
%MACRO PrintVarChr _var
LD _var
ST textChr
LDWI printChr
CALL giga_vAC
%ENDM
%MACRO PrintSpc
ST textSpc
LDWI printSpc
CALL giga_vAC
%ENDM
%MACRO PrintHex
LDWI printHex
CALL giga_vAC
%ENDM
%MACRO PrintString _str
LDWI _str
STW textStr
LDWI printText
CALL giga_vAC
%ENDM
%MACRO PrintAcString
STW textStr
LDWI printText
CALL giga_vAC
%ENDM
%MACRO PrintVarString _var
LDW _var
STW textStr
LDWI printText
CALL giga_vAC
%ENDM
%MACRO PrintAcLeft
LDWI printLeft
CALL giga_vAC
%ENDM
%MACRO PrintAcRight
LDWI printRight
CALL giga_vAC
%ENDM
%MACRO PrintAcMid
LDWI printMid
CALL giga_vAC
%ENDM
%MACRO PrintAcLower
LDWI printLower
CALL giga_vAC
%ENDM
%MACRO PrintAcUpper
LDWI printUpper
CALL giga_vAC
%ENDM
%MACRO PrintInt16 _int
LDWI _int
STW textNum
LDWI printInt16
CALL giga_vAC
%ENDM
%MACRO PrintAcInt16
STW textNum
LDWI printInt16
CALL giga_vAC
%ENDM
%MACRO PrintVarInt16 _var
LDW _var
STW textNum
LDWI printInt16
CALL giga_vAC
%ENDM
%MACRO ReadIntVar
LDWI readIntVar
CALL giga_vAC
%ENDM
%MACRO ReadStrVar
LDWI readStrVar
CALL giga_vAC
%ENDM
%MACRO StringChr
STW strDstAddr
LDWI stringChr
CALL giga_vAC
%ENDM
%MACRO StringSpc
STW strAddr
LDWI stringSpc
CALL giga_vAC
%ENDM
%MACRO StringHex
STW strAddr
LDWI stringHex
CALL giga_vAC
%ENDM
%MACRO StringCopy
STW strDstAddr
LDWI stringCopy
CALL giga_vAC
%ENDM
%MACRO StringCmp
STW strSrcAddr2
LDWI stringCmp
CALL giga_vAC
%ENDM
%MACRO StringConcat
STW strDstAddr
LDWI stringConcat
CALL giga_vAC
%ENDM
%MACRO StringConcatLut
STW strDstAddr
LDWI stringConcatLut
CALL giga_vAC
%ENDM
%MACRO StringLeft
STW strDstAddr
LDWI stringLeft
CALL giga_vAC
%ENDM
%MACRO StringRight
STW strDstAddr
LDWI stringRight
CALL giga_vAC
%ENDM
%MACRO StringMid
STW strDstAddr
LDWI stringMid
CALL giga_vAC
%ENDM
%MACRO StringLower
STW strDstAddr
LDWI stringLower
CALL giga_vAC
%ENDM
%MACRO StringUpper
STW strDstAddr
LDWI stringUpper
CALL giga_vAC
%ENDM
%MACRO StringInt
STW strDstAddr
LDWI stringInt
CALL giga_vAC
%ENDM
%MACRO IntegerStr
STW intSrcAddr
LDWI integerStr
CALL giga_vAC
%ENDM
%MACRO Absolute
STW mathX
LDWI absolute
CALL giga_vAC
%ENDM
%MACRO Sign
STW mathX
LDWI sign
CALL giga_vAC
%ENDM
%MACRO IntMin
STW intSrcB
LDWI integerMin
CALL giga_vAC
%ENDM
%MACRO IntMax
STW intSrcB
LDWI integerMax
CALL giga_vAC
%ENDM
%MACRO IntClamp
STW intSrcB
LDWI integerClamp
CALL giga_vAC
%ENDM
%MACRO Rand
LDWI rand16bit
CALL giga_vAC
%ENDM
%MACRO RandMod
STW mathY
LDWI randMod16bit
CALL giga_vAC
%ENDM
%MACRO ShiftLeft4bit
LDWI shiftLeft4bit
CALL giga_vAC
%ENDM
%MACRO ShiftLeft8bit
LDWI shiftLeft8bit
CALL giga_vAC
%ENDM
%MACRO ShiftRight1bit
LDWI shiftRight1bit
CALL giga_vAC
%ENDM
%MACRO ShiftRight2bit
LDWI shiftRight2bit
CALL giga_vAC
%ENDM
%MACRO ShiftRight3bit
LDWI shiftRight3bit
CALL giga_vAC
%ENDM
%MACRO ShiftRight4bit
LDWI shiftRight4bit
CALL giga_vAC
%ENDM
%MACRO ShiftRight5bit
LDWI shiftRight5bit
CALL giga_vAC
%ENDM
%MACRO ShiftRight6bit
LDWI shiftRight6bit
CALL giga_vAC
%ENDM
%MACRO ShiftRight7bit
LDWI shiftRight7bit
CALL giga_vAC
%ENDM
%MACRO ShiftRight8bit
LDWI shiftRight8bit
CALL giga_vAC
%ENDM
%MACRO ShiftRightSgn1bit
LDWI shiftRightSgn1bit
CALL giga_vAC
%ENDM
%MACRO ShiftRightSgn2bit
LDWI shiftRightSgn2bit
CALL giga_vAC
%ENDM
%MACRO ShiftRightSgn3bit
LDWI shiftRightSgn3bit
CALL giga_vAC
%ENDM
%MACRO ShiftRightSgn4bit
LDWI shiftRightSgn4bit
CALL giga_vAC
%ENDM
%MACRO ShiftRightSgn5bit
LDWI shiftRightSgn5bit
CALL giga_vAC
%ENDM
%MACRO ShiftRightSgn6bit
LDWI shiftRightSgn6bit
CALL giga_vAC
%ENDM
%MACRO ShiftRightSgn7bit
LDWI shiftRightSgn7bit
CALL giga_vAC
%ENDM
%MACRO ShiftRightSgn8bit
LDWI shiftRightSgn8bit
CALL giga_vAC
%ENDM
%MACRO ScanlineMode
LDWI scanlineMode
CALL giga_vAC
%ENDM
%MACRO WaitVBlanks
LDWI waitVBlanks
CALL giga_vAC
%ENDM
%MACRO WaitVBlank
LDWI waitVBlank
CALL giga_vAC
%ENDM
%MACRO ReadPixel
LDWI readPixel
CALL giga_vAC
%ENDM
%MACRO DrawPixel
LDWI drawPixel
CALL giga_vAC
%ENDM
%MACRO DrawLine
LDWI drawLine
CALL giga_vAC
%ENDM
%MACRO DrawVTLine
LDWI drawVTLine
CALL giga_vAC
%ENDM
%MACRO DrawHLine
LDWI drawHLine
CALL giga_vAC
%ENDM
%MACRO DrawVLine
LDWI drawVLine
CALL giga_vAC
%ENDM
%MACRO DrawCircle
LDWI drawCircle
CALL giga_vAC
%ENDM
%MACRO DrawCircleF
LDWI drawCircleF
CALL giga_vAC
%ENDM
%MACRO DrawRect
LDWI drawRect
CALL giga_vAC
%ENDM
%MACRO DrawRectF
LDWI drawRectF
CALL giga_vAC
%ENDM
%MACRO DrawPoly
LDWI drawPoly
CALL giga_vAC
%ENDM
%MACRO DrawPolyRel
LDWI drawPolyRel
CALL giga_vAC
%ENDM
%MACRO SetPolyRelFlipX
LDWI setPolyRelFlipX
CALL giga_vAC
%ENDM
%MACRO SetPolyRelFlipY
LDWI setPolyRelFlipY
CALL giga_vAC
%ENDM
%MACRO AtLineCursor
LDWI atLineCursor
CALL giga_vAC
%ENDM
%MACRO SetMidiStream
STW midiId
LDWI setMidiStream
CALL giga_vAC
%ENDM
%MACRO PlayMidi
STW midiStream
LDWI resetMidi
CALL giga_vAC
%ENDM
%MACRO PlayMidiV
STW midiStream
LDWI resetMidi
CALL giga_vAC
%ENDM
%MACRO GetMidiNote
LDWI midiGetNote
CALL giga_vAC
%ENDM
%MACRO PlayMusic
STW musicStream
LDWI resetMusic
CALL giga_vAC
LDWI playMusic
CALL giga_vAC
%ENDM
%MACRO GetMusicNote
LDWI musicGetNote
CALL giga_vAC
%ENDM
%MACRO Tick
LDWI realTimeStub
CALL giga_vAC
%ENDM
%MACRO TickTime
LDWI tickTime
CALL giga_vAC
%ENDM
%MACRO TickMidi
LDWI playMidi
CALL giga_vAC
%ENDM
%MACRO TickMidiV
LDWI playMidiVol
CALL giga_vAC
%ENDM
%MACRO TimeString
LDWI timeString
CALL giga_vAC
%ENDM
%MACRO DrawSprite
LDWI drawSprite
CALL giga_vAC
%ENDM
%MACRO DrawSpriteX
LDWI drawSpriteX
CALL giga_vAC
%ENDM
%MACRO DrawSpriteY
LDWI drawSpriteY
CALL giga_vAC
%ENDM
%MACRO DrawSpriteXY
LDWI drawSpriteXY
CALL giga_vAC
%ENDM
%MACRO GetSpriteLUT
LDWI getSpriteLUT
CALL giga_vAC
%ENDM
%MACRO SoundAll
LDWI soundAll
CALL giga_vAC
%ENDM
%MACRO SoundAllOff
LDWI soundAllOff
CALL giga_vAC
%ENDM
%MACRO SoundOff
LDWI soundOff
CALL giga_vAC
%ENDM
%MACRO SoundOn
LDWI soundOn
CALL giga_vAC
%ENDM
%MACRO SoundOnV
LDWI soundOnV
CALL giga_vAC
%ENDM
%MACRO SoundMod
LDWI soundMod
CALL giga_vAC
%ENDM
%MACRO BcdAdd
ST bcdLength
LDWI bcdAdd
CALL giga_vAC
%ENDM
%MACRO BcdSub
ST bcdLength
LDWI bcdSub
CALL giga_vAC
%ENDM
%MACRO BcdInt
STW bcdValue
LDWI bcdInt
CALL giga_vAC
%ENDM
%MACRO BcdCmp
ST bcdLength
LDWI bcdCmp
CALL giga_vAC
%ENDM
%MACRO BcdCpy
ST bcdLength
LDWI bcdCpy
CALL giga_vAC
%ENDM
%MACRO JumpFalse _label id
BNE _id_ + 2 ; unique id is used as an internal macro label
LDWI _label
_id_ CALL giga_vAC
%ENDM
%MACRO JumpEQ _label id
BEQ _id_ + 2
LDWI _label
_id_ CALL giga_vAC
%ENDM
%MACRO JumpNE _label id
BNE _id_ + 2
LDWI _label
_id_ CALL giga_vAC
%ENDM
%MACRO JumpLE _label id
BLE _id_ + 2
LDWI _label
_id_ CALL giga_vAC
%ENDM
%MACRO JumpGE _label id
BGE _id_ + 2
LDWI _label
_id_ CALL giga_vAC
%ENDM
%MACRO JumpLT _label id
BLT _id_ + 2
LDWI _label
_id_ CALL giga_vAC
%ENDM
%MACRO JumpGT _label id
BGT _id_ + 2
LDWI _label
_id_ CALL giga_vAC
%ENDM
%MACRO InitEqOp
LDWI convertEqOp
STW convertEqOpAddr
%ENDM
%MACRO InitNeOp
LDWI convertNeOp
STW convertNeOpAddr
%ENDM
%MACRO InitLeOp
LDWI convertLeOp
STW convertLeOpAddr
%ENDM
%MACRO InitGeOp
LDWI convertGeOp
STW convertGeOpAddr
%ENDM
%MACRO InitLtOp
LDWI convertLtOp
STW convertLtOpAddr
%ENDM
%MACRO InitGtOp
LDWI convertGtOp
STW convertGtOpAddr
%ENDM
%MACRO Init8Array2d
LDWI convert8Arr2d
STW convert8Arr2dAddr
%ENDM
%MACRO Init8Array3d
LDWI convert8Arr3d
STW convert8Arr3dAddr
%ENDM
%MACRO Init16Array2d
LDWI convert16Arr2d
STW convert16Arr2dAddr
%ENDM
%MACRO Init16Array3d
LDWI convert16Arr3d
STW convert16Arr3dAddr
%ENDM
%MACRO InitRealTimeStub
LDWI realTimeStub
STW realTimeStubAddr
%ENDM
%MACRO CopyBytes
LDWI copyBytes
CALL giga_vAC
%ENDM
%MACRO CopyWords
LDWI copyWords
CALL giga_vAC
%ENDM
%MACRO ResetVars
LDWI resetVars
CALL giga_vAC
%ENDM
%MACRO RomCheck
LDWI romCheck
CALL giga_vAC
%ENDM
%MACRO RomExec
STW romExec_vLR
LDWI romExec
CALL giga_vAC
%ENDM
%MACRO RomRead
STW romReadAddr
LDWI romRead
CALL giga_vAC
%ENDM
%MACRO Initialise
LDWI 0x0F20
STW fgbgColour ; yellow on blue
LDI ENABLE_SCROLL_BIT
STW miscFlags ; reset flags
LDI 0
STW midiStream ; reset MIDI
LDWI resetVideoFlags
CALL giga_vAC
%ENDM