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
 |