A2osX/BIN/ASM.S.txt

467 lines
9.5 KiB
Plaintext
Raw Normal View History

NEW
PREFIX /A2OSX.BUILD
AUTO 4,1
.LIST OFF
.OP 65C02
.OR $2000
.TF /A2OSX.BUILD/BIN/DEV/ASM
*---------------------------------------
.INB /A2OSX.BUILD/INC/MACROS.I
.INB /A2OSX.BUILD/INC/A2OSX.I
*---------------------------------------
2015-10-06 16:14:48 +00:00
ZPPtr1 .EQ ZPBIN
ZPPtr2 .EQ ZPBIN+2
2015-10-30 16:34:59 +00:00
ZPPtr3 .EQ ZPBIN+4
2018-01-11 16:34:09 +00:00
ZPLineBuf .EQ ZPBIN+6
ZPLinePtr .EQ ZPBIN+8
ZPLocalBuf .EQ ZPBIN+10
ZPMacroBuf .EQ ZPBIN+12
2018-01-11 16:34:09 +00:00
ZPTmpBuf .EQ ZPBIN+14
2018-01-15 06:50:44 +00:00
ZPAMPtr .EQ ZPBIN+16
ZPRPtr .EQ ZPBIN+18
ZPOPtr .EQ ZPBIN+20
2015-10-06 16:14:48 +00:00
*---------------------------------------
SYM.LEN .EQ 0
SYM.F .EQ 1
SYM.F.RESOLVED .EQ %10000000
SYM.F.RW .EQ %01000000
SYM.V .EQ 2
*---------------------------------------
2015-10-28 16:55:12 +00:00
ASM.T.AM .EQ 0
ASM.T.R .EQ 2
ASM.T.O .EQ 4
*---------------------------------------
2015-12-04 16:33:33 +00:00
SRC.DO.MAXDEPTH .EQ 8
2015-10-30 16:34:59 +00:00
SRC.IN.MAXDEPTH .EQ 7
*---------------------------------------
2015-10-06 16:14:48 +00:00
ERR.INV.ARGS .EQ $80
ERR.SRC.INV.TYPE .EQ $90
ERR.SRC.TOO.MANY.IN .EQ $91
2015-10-09 15:53:30 +00:00
ERR.SRC.UNEXP.EOF .EQ $92
2015-10-06 16:14:48 +00:00
ERR.SYNTAX.ERROR .EQ $A0
ERR.SYM.TOO.LONG .EQ $A1
ERR.VAL.TOO.BIG .EQ $A2
ERR.LINE.TOO.LONG .EQ $A3
2018-01-11 16:34:09 +00:00
ERR.INV.LABEL .EQ $A4
ERR.INV.DIR .EQ $A5
2018-01-11 16:34:09 +00:00
ERR.INV.OPCODE .EQ $A6
ERR.INV.AM.SYN .EQ $A7
ERR.INV.AM.4.OC .EQ $A8
2015-11-20 16:31:14 +00:00
ERR.RANGE .EQ $A9
ERR.UNDEF.SYMBOL .EQ $AA
ERR.SYMBOL.REDEF .EQ $AB
2015-12-04 16:33:33 +00:00
ERR.TOO.MANY.DO .EQ $AC
ERR.TOO.MANY.LOCAL .EQ $AD
2015-10-09 15:53:30 +00:00
ERR.MISSING.EXP .EQ $B0
ERR.EXP.SYN.ERROR .EQ $B1
2018-01-29 16:48:07 +00:00
ERR.MACRO.INV.DEF .EQ $E0
ERR.MACRO.TOO.BIG .EQ $E1
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START CS
.DA DS.END-DS.START DS
2018-01-11 16:34:09 +00:00
.DA #0 SS
2018-01-15 06:50:44 +00:00
.DA #24 ZP
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.HELP .DA MSG.HELP
L.MSG.SRCLINE .DA MSG.SRCLINE
2018-01-12 16:05:04 +00:00
L.MSG.LINECR .DA MSG.LINECR
2015-10-02 16:04:30 +00:00
L.MSG.ERROR .DA MSG.ERROR
2015-11-20 16:31:14 +00:00
L.MSG.SYMBOLS .DA MSG.SYMBOLS
L.MSG.GSYMBOL .DA MSG.GSYMBOL
L.MSG.SUMMARY .DA MSG.SUMMARY
2015-10-06 16:14:48 +00:00
L.MSG.PASS .DA MSG.PASS
L.MSG.SRC.FILE .DA MSG.SRC.FILE
L.MSG.OBJ.FILE .DA MSG.OBJ.FILE
2015-10-21 16:24:11 +00:00
L.MSG.T.FILE .DA MSG.T.FILE
2015-11-20 16:31:14 +00:00
L.SRC.AM.StrBuf .DA SRC.AM.StrBuf
2018-01-11 16:34:09 +00:00
L.ASM.6502 .DA ASM.6502
2015-10-21 16:24:11 +00:00
L.ASM.T.FILENAME .DA ASM.T.FILENAME
L.FIO.Stat .DA FIO.Stat
2015-10-04 20:55:51 +00:00
L.T.DIRECTIVES .DA T.DIRECTIVES
J.DIRECTIVES .DA DIR.AC
.DA DIR.AS
.DA DIR.AT
.DA DIR.AZ
.DA DIR.BS
.DA DIR.DA
.DA DIR.DO
.DA DIR.DU
2015-10-06 16:14:48 +00:00
.DA DIR.DU
2015-10-04 20:55:51 +00:00
.DA DIR.ED
.DA DIR.EL
2015-10-06 16:14:48 +00:00
.DA DIR.EM
2015-10-04 20:55:51 +00:00
.DA DIR.EN
.DA DIR.EP
.DA DIR.EQ
.DA DIR.FI
.DA DIR.HS
.DA DIR.IN
2015-10-06 16:14:48 +00:00
.DA DIR.IN
.DA DIR.IN
.DA DIR.IN
.DA DIR.IN
.DA DIR.IN
.DA DIR.IN
.DA DIR.IN
.DA DIR.IN
.DA DIR.IN
.DA DIR.IN
.DA DIR.LI
2015-10-04 20:55:51 +00:00
.DA DIR.LI
.DA DIR.MA
.DA DIR.OP
.DA DIR.OR
.DA DIR.PG
.DA DIR.PH
.DA DIR.SE
.DA DIR.TA
.DA DIR.TF
.DA DIR.TI
.DA DIR.US
2015-10-06 16:14:48 +00:00
L.T.LI .DA T.LI
J.LI .DA DIR.LI.CON
.DA DIR.LI.COFF
.DA DIR.LI.XON
.DA DIR.LI.XOFF
.DA DIR.LI.ON
.DA DIR.LI.OFF
J.EXP.OP .DA EXP.OP.EOR ^!|&<=>+-*/
.DA EXP.OP.ORA
.DA EXP.OP.ORA
.DA EXP.OP.AND
.DA EXP.OP.LOW
.DA EXP.OP.EQU
.DA EXP.OP.GRT
.DA EXP.OP.ADD
.DA EXP.OP.SUB
.DA EXP.OP.MUL
.DA EXP.OP.DIV
.DA 0
*---------------------------------------
CS.INIT ldy #S.PS.ARGC
lda (pPs),y
beq .99
lda #1
>SYSCALL GetArg.A
>SYSCALL RealPath.YA
2016-08-17 06:25:58 +00:00
txa
2015-10-06 16:14:48 +00:00
ldy #SRC.hFILENAME
2015-12-04 16:33:33 +00:00
sta (pData),y
2015-10-21 16:24:11 +00:00
2015-12-04 16:33:33 +00:00
jsr FIO.Init
bcs .9
2017-07-07 15:13:55 +00:00
2015-11-20 16:31:14 +00:00
jsr SYM.Init
2015-12-04 16:33:33 +00:00
bcs .9
2017-07-07 15:13:55 +00:00
2018-01-29 07:41:05 +00:00
jsr MAC.Init
bcs .9
2015-12-04 16:33:33 +00:00
jsr DIR.Init
2015-10-06 16:14:48 +00:00
2018-01-11 16:34:09 +00:00
>LDYAI 256
>SYSCALL GetMem.YA
bcs .9
>STYA ZPLineBuf
txa
>STA.G SRC.hLineBuf
>LDYAI 256
>SYSCALL GetMem.YA
bcs .9
>STYA ZPTmpBuf
txa
>STA.G SRC.hTmpBuf
2017-07-07 15:13:55 +00:00
* lda (pPs)
* ora #S.PS.F.EVENT
* sta (pPs)
clc
rts
.99 >LDYA L.MSG.HELP
>SYSCALL PrintF.YA
2015-12-04 16:33:33 +00:00
lda #ERR.INV.ARGS
sec
2015-12-04 16:33:33 +00:00
.9 rts
*--------------------------------------
CS.RUN >SYSCALL GetChar
2017-07-07 15:13:55 +00:00
bcs .11 no char
cmp #$03 Ctrl-C
beq .99 Abort....
cmp #$13 Ctrl-S
bne .11
2017-07-07 15:13:55 +00:00
ldy #bPause
2015-09-16 20:48:59 +00:00
lda (pData),y
2017-07-07 15:13:55 +00:00
eor #$ff
sta (pData),y
.11 ldy #bPause
lda (pData),y
bne .8
ldy #SRC.COUNT root file is already opened?
2015-10-02 16:04:30 +00:00
lda (pData),y
bne .10
>LDA.G ASM.PASS
2015-10-09 15:53:30 +00:00
inc
2015-10-06 16:14:48 +00:00
>PUSHA
>LDYA L.MSG.PASS
>SYSCALL PrintF.YA
2015-10-06 16:14:48 +00:00
2015-10-02 16:04:30 +00:00
ldy #SRC.hFILENAME
lda (pData),y
2018-01-11 16:34:09 +00:00
>SYSCALL GetMemPtr.A
jsr FIO.OpenFile
2015-10-06 16:14:48 +00:00
bcs .99
2015-10-02 16:04:30 +00:00
2018-01-11 16:34:09 +00:00
.10 jsr FIO.ReadLine
2015-10-02 16:04:30 +00:00
bcc .2
cmp #$4C End Of File?
bne .9
2015-10-28 16:55:12 +00:00
jsr FIO.FileClose
2015-10-09 15:53:30 +00:00
2015-10-28 16:55:12 +00:00
ldy #SRC.COUNT end of root file ?
2015-10-02 16:04:30 +00:00
lda (pData),y
bne .8 no continue back to previous file
>LDA.G ASM.PASS End of pass #2 ??
2015-10-02 16:04:30 +00:00
bne .1
inc
sta (pData),y
jsr DIR.Init Reset
clc
rts
2015-11-20 16:31:14 +00:00
.1 jsr SYM.Dump
2018-01-29 16:48:07 +00:00
>PUSHW ZPLinePtr
>LDYA L.MSG.SUMMARY
>SYSCALL PrintF.YA
2015-11-20 16:31:14 +00:00
lda #0 End of assembly, exit with no error
2015-10-02 16:04:30 +00:00
.99 sec
rts
2018-01-29 16:48:07 +00:00
.2 jsr SRC.ParseLine
2015-11-27 16:26:11 +00:00
bcs .9
2015-10-02 16:04:30 +00:00
2018-01-29 16:48:07 +00:00
jsr SRC.PrintLine
2015-10-02 16:04:30 +00:00
.8 clc
rts
2015-10-06 16:14:48 +00:00
.9 pha
2015-12-17 16:57:35 +00:00
jsr SRC.PrintLineErr
2015-10-06 16:14:48 +00:00
pla
pha
>PUSHA
2018-01-29 16:48:07 +00:00
>PUSHW.G SRC.LINENUM
>LDYA L.MSG.ERROR
>SYSCALL PrintF.YA
2015-10-06 16:14:48 +00:00
pla
2015-10-02 16:04:30 +00:00
sec
rts
*--------------------------------------
2017-07-07 15:13:55 +00:00
CS.DOEVENT sec
rts
*--------------------------------------
2015-10-28 16:55:12 +00:00
CS.QUIT jsr FIO.FileClose
2015-10-02 16:04:30 +00:00
bne CS.QUIT
2018-01-29 07:41:05 +00:00
jsr MAC.Quit
2015-11-20 16:31:14 +00:00
jsr SYM.Quit
2018-01-11 16:34:09 +00:00
>LDA.G ASM.T.hMem
2015-10-21 16:24:11 +00:00
beq .1
2018-01-11 16:34:09 +00:00
>SYSCALL FreeMem.A
2015-10-21 16:24:11 +00:00
2018-01-11 16:34:09 +00:00
.1 >LDA.G SRC.hFILENAME
beq .2
>SYSCALL FreeMem.A
.2 >LDA.G SRC.hLineBuf
beq .3
>SYSCALL FreeMem.A
.3 >LDA.G SRC.hTmpBuf
2015-09-16 15:58:06 +00:00
beq .8
>SYSCALL FreeMem.A
.8 clc
rts
*---------------------------------------
.INB /A2OSX.BUILD/BIN/DEV/ASM.S.DIR
.INB /A2OSX.BUILD/BIN/DEV/ASM.S.EXP
.INB /A2OSX.BUILD/BIN/DEV/ASM.S.FIO
2018-01-29 07:41:05 +00:00
.INB /A2OSX.BUILD/BIN/DEV/ASM.S.MAC
.INB /A2OSX.BUILD/BIN/DEV/ASM.S.SRC
.INB /A2OSX.BUILD/BIN/DEV/ASM.S.SYM
2015-10-02 16:04:30 +00:00
*---------------------------------------
CS.END
2018-01-11 16:34:09 +00:00
T.DIRECTIVES >PSTR "AC"
>PSTR "AS"
>PSTR "AT"
>PSTR "AZ"
>PSTR "BS"
>PSTR "DA"
>PSTR "DO"
>PSTR "DU"
>PSTR "DUMMY"
>PSTR "ED"
>PSTR "ELSE"
>PSTR "EM"
>PSTR "EN"
>PSTR "EP"
>PSTR "EQ"
>PSTR "FIN"
>PSTR "HS"
>PSTR "IN"
>PSTR "INB"
>PSTR "INB1"
>PSTR "INB2"
>PSTR "INB3"
>PSTR "INB4"
>PSTR "INB5"
>PSTR "INB6"
>PSTR "INB7"
>PSTR "INB8"
>PSTR "INB9"
>PSTR "LI"
>PSTR "LIST"
>PSTR "MA"
>PSTR "OP"
>PSTR "OR"
>PSTR "PG"
>PSTR "PH"
>PSTR "SE"
>PSTR "TA"
>PSTR "TF"
>PSTR "TI"
>PSTR "US"
2015-10-04 20:55:51 +00:00
.HS 00
*---------------------------------------
2018-01-11 16:34:09 +00:00
T.LI >PSTR "CON"
>PSTR "COFF"
>PSTR "XON"
>PSTR "XOFF"
>PSTR "ON"
>PSTR "OFF"
2015-10-06 16:14:48 +00:00
.HS 00
*---------------------------------------
MSG.HELP >CSTR "A2osX-Macro Assembler (S-C MASM 3.0 Based)\r\nUsage : ASM <src file> [type TXT ($04) or S-C/BAS ($FA)]\r\n"
MSG.PASS >CSTR "Pass:#%d\r\n"
MSG.SRC.FILE >CSTR "Reading SRC File:%s\r\n"
MSG.OBJ.FILE >CSTR "Writing OBJ File:%s, Type=%02x\r\n"
MSG.T.FILE >CSTR "Loading CPU File:%s\r\n"
MSG.SRCLINE >CSTR "%H- %05D %s\r\n"
2018-01-12 16:05:04 +00:00
MSG.LINECR >CSTR "%s\r\n"
MSG.ERROR >CSTR "%05D-Error:$%h\r\n"
MSG.SYMBOLS >CSTR "Symbol Table:\r\n"
MSG.GSYMBOL >CSTR "$%h%h%h%h:%S\r\n"
2018-01-29 16:48:07 +00:00
MSG.SUMMARY >CSTR "\r\nSymbol Table Size : %5D Bytes.\r\nEnd Of Assembly.\r\n"
SRC.AM.RESERVED >PSTR "[](),"
SRC.MOD.RESERVED >PSTR "#/<>"
SRC.EXP.RESERVED >PSTR "^!|&<=>+-*/"
2018-01-11 16:34:09 +00:00
ASM.6502 >CSTR "6502"
*---------------------------------------
2015-10-21 16:24:11 +00:00
ASM.T.FILENAME .BS 65
2015-11-20 16:31:14 +00:00
FIO.Stat .BS S.STAT
2015-11-20 16:31:14 +00:00
EXP.Operator .BS 1
2015-12-17 16:57:35 +00:00
EXP.Modifier .BS 1
2015-10-06 16:14:48 +00:00
SRC.Keyword.ID .BS 1
2015-10-02 16:04:30 +00:00
SRC.ACC .BS 4
SRC.ACCTMP .BS 4
2015-11-27 16:26:11 +00:00
SRC.ARG .BS 4
2015-10-30 16:34:59 +00:00
SRC.AM.ID .BS 1
SRC.AM.StrBuf .BS 32
*--------------------------------------
.DUMMY
.OR 0
DS.START
2017-07-07 15:13:55 +00:00
bPause .BS 1
2015-09-16 20:48:59 +00:00
2015-10-02 16:04:30 +00:00
SRC.hFILENAME .BS 1
2018-01-11 16:34:09 +00:00
SRC.hLineBuf .BS 1
SRC.hTmpBuf .BS 1
2015-10-02 16:04:30 +00:00
2015-09-16 15:58:06 +00:00
SRC.COUNT .BS 1
SRC.hFILES .BS SRC.IN.MAXDEPTH
2015-12-04 16:33:33 +00:00
SRC.hFILETYPES .BS SRC.IN.MAXDEPTH
DST.hFILENAME .BS 1
DST.hREFNUM .BS 1
DST.hBUFFER .BS 1
2015-10-02 16:04:30 +00:00
DST.hFILETYPE .BS 1
2018-01-29 16:48:07 +00:00
SRC.LINENUM .BS 2
2015-09-16 20:48:59 +00:00
2015-12-04 16:33:33 +00:00
ASM.T.hMem .BS 1
2015-10-06 16:14:48 +00:00
2015-12-04 16:33:33 +00:00
DIR.Counter .BS 2
DIR.Byte .BS 1
ASM.PASS .BS 1
2015-12-04 16:33:33 +00:00
ASM.DO.Count .BS 1
ASM.DOELSE.Flag .BS SRC.DO.MAXDEPTH
ASM.DO.ON .BS 1
2015-10-02 16:04:30 +00:00
ASM.PH.ON .BS 1
2015-10-06 16:14:48 +00:00
ASM.LI.ON .BS 1
ASM.LI.CON .BS 1
ASM.LI.MON .BS 1
2015-10-06 16:14:48 +00:00
ASM.LI.XON .BS 1
2015-12-04 16:33:33 +00:00
ASM.PC .BS 4
ASM.PC.PH .BS 4
SYM.hGlobals .BS 1
SYM.bGlobal .BS 1
2018-01-22 07:34:59 +00:00
SYM.Global .BS 6
SYM.ID .BS 2
SYM.hLocalBuf .BS 1
SYM.LocalIndex .BS 1
SYM.Lookup .BS 6
2018-01-29 07:41:05 +00:00
MAC.hMacros .BS 1
MAC.hBuf .BS 1
2018-01-29 16:48:07 +00:00
MAC.bAdd .BS 1
DS.END .ED
2015-11-20 16:31:14 +00:00
*---------------------------------------
.DO DS.END-DS.START>$FF
ERROR:DS too big
.FIN
*---------------------------------------
MAN
SAVE /A2OSX.BUILD/BIN/DEV/ASM.S
ASM