mirror of
https://github.com/callapple/LLUCE.git
synced 2024-09-28 07:55:16 +00:00
267 lines
5.9 KiB
ArmAsm
267 lines
5.9 KiB
ArmAsm
********************************
|
|
* *
|
|
* Text compiler *
|
|
* *
|
|
********************************
|
|
* Copyright 1986-1993 By L&L Productions
|
|
*-------------------------------
|
|
*
|
|
* Usage: OVERLAY "COMP.TXT"[,n]
|
|
*
|
|
* If n > 0, write text to memory
|
|
* If n = 0, or not supplied, read text from file
|
|
*-------------------------------
|
|
|
|
Id = 5
|
|
Aux = 254
|
|
|
|
LST OFF
|
|
LSTDO OFF
|
|
XC
|
|
TR
|
|
TR ADR
|
|
EXP ONLY
|
|
Y = 1
|
|
y = 1
|
|
N = 0
|
|
n = 0
|
|
NOLIST = Y
|
|
DO NOLIST
|
|
LISTOBJ = N
|
|
LISTSYM = N
|
|
ELSE
|
|
LISTOBJ KBD 'List This Source? (Y/N)'
|
|
LISTSYM KBD 'List Symbol Table? (Y/N)'
|
|
FIN
|
|
LST OFF
|
|
USE EQUATES/MACROS
|
|
PUT EQUATES/EQUATES
|
|
PUT EQUATES/OS.EQUATES
|
|
PUT EQUATES/ENTRY
|
|
PUT EQUATES/DRIVEREQU
|
|
PUT EQUATES/RAMAREA
|
|
|
|
]TYPE = ^overlays ; set file type
|
|
]AUX = overlays ; and aux type
|
|
ORG ]AUX ; must be this way
|
|
TYP ]TYPE
|
|
|
|
DSK /MAIN/LLUCE/SYSTEM/COMP.TXT
|
|
|
|
TTL 'LLUCE - Text compiler'
|
|
DO LISTOBJ
|
|
LST
|
|
FIN
|
|
|
|
DB Id
|
|
DA Aux
|
|
DB Aux/256!Aux!Id!$A5
|
|
|
|
*-------------------------------
|
|
* Size Of Code To Check For CRC
|
|
*-------------------------------
|
|
|
|
DA CODEEND-CODESTRT
|
|
DA 0 ; CRC Goes Here
|
|
LST OFF
|
|
ORG $D000
|
|
|
|
CODESTRT = *
|
|
|
|
STZ WHERETO
|
|
IFNE (PRGPTR);#','+Hibit;USE_DEF
|
|
|
|
JSR GOBCOM
|
|
JSR INPNUM
|
|
CPEQX #0;USE_DEF
|
|
|
|
DEC WHERETO
|
|
USE_DEF TSTPL WHERETO;LOADFILE
|
|
|
|
LDX #0
|
|
MOVECODE MOV COPYCODE,X;PUTCHAR,X
|
|
DBNE X;MOVECODE
|
|
BRA COMP
|
|
|
|
LOADFILE JSR PD_GPFX
|
|
LD16 #OLDPFX
|
|
JSR FRMFLN
|
|
LD16 #SYSPFX
|
|
JSR TOFLN
|
|
JSR PD_SPFX
|
|
|
|
LD16 #FILENAME
|
|
JSR TOFLN
|
|
JSR IFOPEN
|
|
BCC COMP
|
|
|
|
MOV #-1;PRN
|
|
RTS
|
|
|
|
COMP BRK 00
|
|
|
|
COMP2 JSR COPYLINE
|
|
JSR COMPILE
|
|
BCS COMPERR
|
|
BNE COMP2
|
|
|
|
ENDSEC1 LDA #>PROGTEXT-ERRMSGS
|
|
JSR SETPTR
|
|
|
|
SECTION2 JSR COPYLINE
|
|
JSR COMPILE
|
|
BCS COMPERR
|
|
BNE SECTION2
|
|
|
|
ENDSEC2 LDA #>VIDMSGS-ERRMSGS
|
|
JSR SETPTR
|
|
|
|
SECTION3 JSR COPYLINE
|
|
CPEQX #0;ENDSEC3
|
|
|
|
JSR INPNUMB
|
|
JSR WRTCHAR
|
|
JSR COPYLINE
|
|
JSR COMPILE
|
|
BCS COMPERR
|
|
BNE SECTION3
|
|
|
|
ENDSEC3 CLC
|
|
COMPERR PHP
|
|
TSTMI WHERETO;EXIT
|
|
|
|
JSR PD_CLOSE ; close the file
|
|
|
|
LD16 #OLDPFX ; reset the prefix
|
|
JSR TOFLN
|
|
JSR PD_SPFX
|
|
|
|
EXIT LDA #0
|
|
PLP
|
|
BCC EXIT2
|
|
DEC A
|
|
EXIT2 STA PRN
|
|
RTS
|
|
|
|
COMPILE LDX #0
|
|
COMPLUP LDEQ LNBUF,X;ERROR
|
|
CPEQ #'.';TSTEND2
|
|
CPEQ #'\';HNDLBKSL
|
|
CHKENDLN LDY LNBUF+1,X
|
|
CPNEY #cr;STDCHAR
|
|
INX
|
|
ORA #Hibit
|
|
STDCHAR PHP
|
|
JSR WRTCHAR
|
|
INX
|
|
PLP
|
|
BPL COMPLUP
|
|
LDA #cr
|
|
CLC
|
|
RTS
|
|
|
|
HNDLBKSL IFEQ LNBUF+1,X;#'\';NXTCHAR
|
|
CPLT #'a';NOTLC
|
|
SBC #$20
|
|
NOTLC CPLT #'A';NOTALF
|
|
CPGE #'_'+1;NOTALF
|
|
SEC
|
|
SBC #Ctrl
|
|
NXTCHAR IBRA X;CHKENDLN
|
|
|
|
NOTALF CPNE #'?';ESCBAD
|
|
LDA #$7F
|
|
BRA NXTCHAR
|
|
|
|
ESCBAD LDA #'\'
|
|
BRA STDCHAR
|
|
|
|
TSTEND2 LDY LNBUF+1,X
|
|
CPNEY #cr;STDCHAR
|
|
LDA #0
|
|
JSR WRTCHAR
|
|
JSR WRTCHAR
|
|
LDA #0
|
|
CLC
|
|
RTS
|
|
|
|
ERROR SEC
|
|
RTS
|
|
|
|
INPNUMB STZ TEMP
|
|
|
|
LDX #0
|
|
|
|
NUMBER2 IFLT LNBUF,X;#'0';NUMBER5 ; is it a number?
|
|
CPGE #'9'+1;NUMBER5
|
|
AND #LoNibble
|
|
PHA
|
|
LDA TEMP
|
|
ASL A
|
|
ASL A
|
|
CLC
|
|
ADC TEMP
|
|
ASL A
|
|
STA TEMP
|
|
CLC
|
|
PLA
|
|
ADC TEMP
|
|
STA TEMP
|
|
IBRA X;NUMBER2
|
|
|
|
NUMBER5 LDA TEMP
|
|
RTS
|
|
|
|
COPYLINE LDX #0
|
|
COPYLUP JSR EDIN
|
|
STA LNBUF,X
|
|
TAY
|
|
BEQ CPYDONE
|
|
INX
|
|
CPNE #cr;COPYLUP
|
|
CPYDONE RTS
|
|
|
|
WRTCHAR TSTPL WHERETO;WRFILE
|
|
JMP PUTCHAR
|
|
|
|
WRFILE JMP PD_WRBYT
|
|
|
|
SETPTR TSTPL WHERETO;POSFILE
|
|
JMP SETPOS
|
|
|
|
POSFILE LDX #0
|
|
LDY #0
|
|
JMP PD_SPOS
|
|
|
|
COPYCODE ORG FREESPACE
|
|
|
|
PUTCHAR STZ SETSTDZP ; enable message area
|
|
STZ SETRAM1
|
|
|
|
TEXTPTR STA ERRMSGS ; get the byte
|
|
|
|
INCD TEXTPTR+1 ; increment pointer
|
|
|
|
STZ SETALTZP ; put overlay back
|
|
STZ SETRAM2
|
|
RTS
|
|
|
|
SETPOS CLC
|
|
ADC #>ERRMSGS
|
|
STA TEXTPTR+2
|
|
STZ TEXTPTR+1
|
|
RTS
|
|
|
|
ORG
|
|
|
|
CODEEND = *
|
|
|
|
WHERETO DB 0
|
|
FILENAME STR 'LLUCE.TEXT'
|
|
OLDPFX DS $40
|
|
LST OFF
|
|
DO LISTSYM
|
|
LST
|
|
FIN
|
|
|