mirror of
https://github.com/dschmenk/PLASMA.git
synced 2024-10-18 07:24:16 +00:00
151 lines
2.4 KiB
ArmAsm
Executable File
151 lines
2.4 KiB
ArmAsm
Executable File
;
|
|
; Sample PLASMA library.
|
|
;
|
|
!TO "samplib.bin", PLAIN
|
|
* = $1000
|
|
;
|
|
; DATA/CODE SEGMENT
|
|
;
|
|
_SEGBEGIN
|
|
!WORD _SEGEND-_SEGBEGIN ; LENGTH OF HEADER + CODE/DATA + BYTECODE SEGMENT
|
|
;
|
|
; MODULE HEADER
|
|
;
|
|
!WORD $DA7E ; MAGIC #
|
|
!WORD _SUBSEG ; BYTECODE SUB-SEGMENT
|
|
!WORD _INIT ; BYTECODE INIT ROUTINE
|
|
;
|
|
; MODULE DEPENDENCY LIST
|
|
; NOTE: DCI = PSUEDO OP FOR ASCII STRING WITH HI BIT SET EXCEPT LAST CHAR
|
|
;
|
|
;DCI "STDLIB"
|
|
!CT "hi.ascii"
|
|
!TX "STDLI"
|
|
!CT RAW
|
|
!TX 'B'
|
|
;DCI "FILEIO"
|
|
!CT "hi.ascii"
|
|
!TX "FILEI"
|
|
!CT RAW
|
|
!TX 'O'
|
|
!BYTE 0
|
|
;
|
|
; NATIVE CODE + GLOBAL DATA
|
|
;
|
|
COUNT !WORD 0
|
|
INCCNT
|
|
FIXUP1 INC COUNT
|
|
BNE XINIT
|
|
FIXUP2 INC COUNT+1
|
|
XINIT RTS
|
|
;
|
|
; BYTECODE SUB-SEGMENT
|
|
;
|
|
_SUBSEG
|
|
MYFUNC !BYTE $58, $01, $16 ; ENTER 1,16
|
|
!BYTE $66, $02 ; LLW 2
|
|
!BYTE $2A, $01 ; CB 1
|
|
!BYTE $54 ; CALL EXTERN(1) "OPEN"
|
|
FIXUP4 !WORD $0000
|
|
!BYTE $6E, $04 ; DLW 4
|
|
!BYTE $54 ; CALL EXTERN(3) "READ"
|
|
FIXUP5 !WORD $0000
|
|
!BYTE $30 ; DROP
|
|
!BYTE $66, $04 ; LLW 4
|
|
!BYTE $54 ; CALL EXTERN(2) ; "CLOSE"
|
|
FIXUP6 !WORD $0000
|
|
!BYTE $30 ; DROP
|
|
!BYTE $6A ; LAW COUNT
|
|
FIXUP7 !WORD $0000
|
|
!BYTE $54 ; CALL INCNT
|
|
FIXUP8 !WORD $0000
|
|
!BYTE $5A ; LEAVE
|
|
_INIT
|
|
!BYTE $5C ; RET
|
|
;
|
|
; END OF CODE/DATA + BYTECODE SEGMENT
|
|
;
|
|
_SEGEND
|
|
;
|
|
; BYTCODE FUNCTION DICTIONARY
|
|
;
|
|
!BYTE $A1 ; FIXUP FLAGS
|
|
!WORD MYFUNC ; FIXUP OFFSET
|
|
!BYTE $00 ; FIXUP LO BYTE (OF HI BYTE)/IMPORT INDEX
|
|
;
|
|
; RE-LOCATION DICTIONARY (FIXUP TABLE)
|
|
;
|
|
!BYTE $81 ; FIXUP FLAGS
|
|
!WORD FIXUP1+1 ; FIXUP OFFSET
|
|
!BYTE $00 ; FIXUP LO BYTE (OF HI BYTE)/IMPORT INDEX
|
|
!BYTE $81
|
|
!WORD FIXUP2+1
|
|
!BYTE $00
|
|
!BYTE $91 ; IMPORT FIXUP
|
|
!WORD FIXUP4
|
|
!BYTE $01 ; IMPORT INDEX 1
|
|
!BYTE $91
|
|
!WORD FIXUP5
|
|
!BYTE $03
|
|
!BYTE $91
|
|
!WORD FIXUP6
|
|
!BYTE $02
|
|
!BYTE $81
|
|
!WORD FIXUP7
|
|
!BYTE $00
|
|
!BYTE $81
|
|
!WORD FIXUP8
|
|
!BYTE $00
|
|
!BYTE 0 ; END OF RLD
|
|
;
|
|
; EXTERNAL/ENTRY SYMBOL DIRECTORY
|
|
;;
|
|
; IMPORT TABLE
|
|
;
|
|
IMPTBL ;DCI "OPEN" ; EXTERNAL SYMBOL NAME
|
|
!CT "hi.ascii"
|
|
!TX "OPE"
|
|
!CT RAW
|
|
!TX 'N'
|
|
!BYTE $10 ; EXTERNAL SYMBOL FLAG
|
|
!WORD 1 ; SYMBOL INDEX
|
|
;DCI "CLOSE"
|
|
!CT "hi.ascii"
|
|
!TX "CLOS"
|
|
!CT RAW
|
|
!TX 'E'
|
|
!BYTE $10
|
|
!WORD 2
|
|
;DCI "READ"
|
|
!CT "hi.ascii"
|
|
!TX "REA"
|
|
!CT RAW
|
|
!TX 'D'
|
|
!BYTE $10
|
|
!WORD 3
|
|
;DCI "MEMSET"
|
|
!CT "hi.ascii"
|
|
!TX "MEMSE"
|
|
!CT RAW
|
|
!TX 'T'
|
|
!BYTE $10
|
|
!WORD 4
|
|
;
|
|
; EXPORT TABLE
|
|
;
|
|
EXPTBL ;DCI "INCNT" ; ENTRY SYMBOL NAME
|
|
!CT "hi.ascii"
|
|
!TX "INCN"
|
|
!CT RAW
|
|
!TX 'T'
|
|
!BYTE $08 ; ENTRY SYMBOL FLAG
|
|
!WORD INCCNT ; OFFSET
|
|
;DCI "MYFUNC"
|
|
!CT "hi.ascii"
|
|
!TX "MYFUN"
|
|
!CT RAW
|
|
!TX 'C'
|
|
!BYTE $08
|
|
!WORD MYFUNC
|
|
!BYTE 0 ; END OF ESD
|