250 lines
7.5 KiB
OpenEdge ABL
250 lines
7.5 KiB
OpenEdge ABL
cpySrcAddr EQU register0
|
|
cpyDstAddr EQU register1
|
|
cpyCount EQU register2
|
|
cpyLoaderLut EQU register3
|
|
regsWork EQU giga_sysArg4 ; use SYS arg registers to stop conflicts with time slicing/vblanks
|
|
regsAddr EQU giga_sysArg6 ; use SYS arg registers to stop conflicts with time slicing/vblanks
|
|
|
|
|
|
%SUB loadRegs
|
|
; hard coded to save register8 to register15
|
|
loadRegs LDWI regsWorkArea
|
|
STW regsWork
|
|
LDI register8
|
|
STW regsAddr
|
|
|
|
loadRegs_loop LDW regsWork
|
|
DEEK
|
|
DOKE regsAddr
|
|
INC regsAddr
|
|
INC regsAddr
|
|
INC regsWork
|
|
INC regsWork
|
|
LDW regsAddr
|
|
SUBI register15
|
|
BLE loadRegs_loop
|
|
RET
|
|
%ENDS
|
|
|
|
%SUB saveRegs
|
|
; hard coded to load register8 to register15
|
|
saveRegs LDWI regsWorkArea
|
|
STW regsWork
|
|
LDI register8
|
|
STW regsAddr
|
|
|
|
saveRegs_loop LDW regsAddr
|
|
DEEK
|
|
DOKE regsWork
|
|
INC regsWork
|
|
INC regsWork
|
|
INC regsAddr
|
|
INC regsAddr
|
|
LDW regsAddr
|
|
SUBI register15
|
|
BLE saveRegs_loop
|
|
RET
|
|
%ENDS
|
|
|
|
%SUB getArrayByte
|
|
; get 8bit value from array
|
|
getArrayByte LDW memAddr
|
|
ADDW memIndex0
|
|
PEEK
|
|
RET
|
|
%ENDS
|
|
|
|
%SUB setArrayByte
|
|
; set 8bit value from array
|
|
setArrayByte LDW memAddr
|
|
ADDW memIndex0
|
|
STW memAddr
|
|
LDW memValue
|
|
POKE memAddr
|
|
RET
|
|
%ENDS
|
|
|
|
%SUB getArrayInt16
|
|
; get 16bit value from array
|
|
getArrayInt16 LDW memAddr
|
|
ADDW memIndex0
|
|
ADDW memIndex0
|
|
DEEK
|
|
RET
|
|
%ENDS
|
|
|
|
%SUB setArrayInt16
|
|
; set 16bit value from array
|
|
setArrayInt16 LDW memAddr
|
|
ADDW memIndex0
|
|
ADDW memIndex0
|
|
STW memAddr
|
|
LDW memValue
|
|
DOKE memAddr
|
|
RET
|
|
%ENDS
|
|
|
|
%SUB getArrayInt16Low
|
|
; get low byte from 16bit array value
|
|
getArrayInt16Low LDW memAddr
|
|
ADDW memIndex0
|
|
ADDW memIndex0
|
|
PEEK
|
|
RET
|
|
%ENDS
|
|
|
|
%SUB setArrayInt16Low
|
|
; set low byte from 16bit array value
|
|
setArrayInt16Low LDW memAddr
|
|
ADDW memIndex0
|
|
ADDW memIndex0
|
|
STW memAddr
|
|
LDW memValue
|
|
POKE memAddr
|
|
RET
|
|
%ENDS
|
|
|
|
%SUB getArrayInt16High
|
|
; get High byte from 16bit array value
|
|
getArrayInt16High LDW memAddr
|
|
ADDW memIndex0
|
|
ADDW memIndex0
|
|
ADDI 1
|
|
PEEK
|
|
RET
|
|
%ENDS
|
|
|
|
%SUB setArrayInt16High
|
|
; set High byte from 16bit array value
|
|
setArrayInt16High LDW memAddr
|
|
ADDW memIndex0
|
|
ADDW memIndex0
|
|
ADDI 1
|
|
STW memAddr
|
|
LDW memValue
|
|
POKE memAddr
|
|
RET
|
|
%ENDS
|
|
|
|
%SUB convert8Arr2d
|
|
convert8Arr2d ADDW memIndex0
|
|
ADDW memIndex0
|
|
DEEK
|
|
ADDW memIndex1
|
|
STW memAddr
|
|
RET
|
|
%ENDS
|
|
|
|
%SUB convert8Arr3d
|
|
convert8Arr3d ADDW memIndex0
|
|
ADDW memIndex0
|
|
DEEK
|
|
ADDW memIndex1
|
|
ADDW memIndex1
|
|
DEEK
|
|
ADDW memIndex2
|
|
STW memAddr
|
|
RET
|
|
%ENDS
|
|
|
|
%SUB convert16Arr2d
|
|
convert16Arr2d ADDW memIndex0
|
|
ADDW memIndex0
|
|
DEEK
|
|
ADDW memIndex1
|
|
ADDW memIndex1
|
|
STW memAddr
|
|
RET
|
|
%ENDS
|
|
|
|
%SUB convert16Arr3d
|
|
convert16Arr3d ADDW memIndex0
|
|
ADDW memIndex0
|
|
DEEK
|
|
ADDW memIndex1
|
|
ADDW memIndex1
|
|
DEEK
|
|
ADDW memIndex2
|
|
ADDW memIndex2
|
|
STW memAddr
|
|
RET
|
|
%ENDS
|
|
|
|
%SUB readIntVar
|
|
readIntVar LDWI _dataIndex_
|
|
STW memAddr
|
|
DEEK
|
|
STW memIndex0
|
|
ADDI 1
|
|
DOKE memAddr
|
|
LDWI _data_
|
|
ADDW memIndex0
|
|
ADDW memIndex0
|
|
DEEK
|
|
RET
|
|
%ENDS
|
|
|
|
%SUB readStrVar
|
|
readStrVar PUSH
|
|
CALLI readIntVar
|
|
STW strSrcAddr
|
|
CALLI stringCopy
|
|
POP
|
|
RET
|
|
%ENDS
|
|
|
|
%SUB copyBytes
|
|
copyBytes LDW cpySrcAddr
|
|
PEEK
|
|
POKE cpyDstAddr
|
|
INC cpySrcAddr
|
|
INC cpyDstAddr
|
|
LDW cpyCount
|
|
SUBI 1
|
|
STW cpyCount
|
|
BGT copyBytes
|
|
RET
|
|
%ENDS
|
|
|
|
%SUB copyWords
|
|
copyWords LDW cpySrcAddr
|
|
DEEK
|
|
DOKE cpyDstAddr
|
|
INC cpySrcAddr
|
|
INC cpySrcAddr
|
|
INC cpyDstAddr
|
|
INC cpyDstAddr
|
|
LDW cpyCount
|
|
SUBI 1
|
|
STW cpyCount
|
|
BGT copyWords
|
|
RET
|
|
%ENDS
|
|
|
|
%SUB copyLoaderImages
|
|
copyLoaderImages PUSH
|
|
LDWI _loader_image_chunksLut
|
|
STW cpyLoaderLut
|
|
|
|
copyLI_loop LDW cpyLoaderLut
|
|
DEEK
|
|
BEQ copyLI_exit
|
|
STW cpySrcAddr
|
|
INC cpyLoaderLut
|
|
INC cpyLoaderLut
|
|
LDW cpyLoaderLut
|
|
DEEK
|
|
STW cpyDstAddr
|
|
INC cpyLoaderLut
|
|
INC cpyLoaderLut
|
|
LDW cpyLoaderLut
|
|
PEEK
|
|
STW cpyCount
|
|
INC cpyLoaderLut
|
|
CALLI copyBytes
|
|
BRA copyLI_loop
|
|
|
|
copyLI_exit POP
|
|
RET
|
|
%ENDS
|