A2osX/BIN/ASM.S.txt

498 lines
10 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
ZPOpDefPtr .EQ ZPBIN+22
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.F.SIZE .EQ %00000111
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 .EQ $A8
ERR.INV.AM.4.OC .EQ $A9
ERR.RANGE .EQ $AA
ERR.UNDEF.SYMBOL .EQ $AB
ERR.SYMBOL.REDEF .EQ $AC
ERR.TOO.MANY.DO .EQ $AD
ERR.ELSE.WITHOUT.DO .EQ $AE
ERR.TOO.MANY.LOCAL .EQ $AF
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.OUT0 .DA MSG.OUT0
.DA MSG.OUT1
.DA MSG.OUT2
.DA MSG.OUT3
L.MSG.EQU0 .DA MSG.EQU0
.DA MSG.EQU1
.DA MSG.EQU2
.DA MSG.EQU3
.DA MSG.EQU4
L.MSG.SRCLINE .DA MSG.SRCLINE
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.PSTRCRLF .DA MSG.PSTRCRLF
2015-11-20 16:31:14 +00:00
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.ON
.DA DIR.LI.OFF
.DA DIR.LI.CON
2015-10-06 16:14:48 +00:00
.DA DIR.LI.COFF
.DA DIR.LI.MON
.DA DIR.LI.MOFF
2015-10-06 16:14:48 +00:00
.DA DIR.LI.XON
.DA DIR.LI.XOFF
2018-03-19 16:48:41 +00:00
J.EXP.MOD .DA EXP.MOD.8.1 #/^<>
.DA EXP.MOD.8.2
.DA EXP.MOD.8.3
.DA EXP.MOD.24
.DA EXP.MOD.32
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-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
2018-03-19 16:48:41 +00:00
jsr DIR.Init Reset
>DEBUG
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
jsr OUT.PrintLine
2018-01-29 16:48:07 +00:00
2015-10-02 16:04:30 +00:00
.8 clc
rts
2015-10-06 16:14:48 +00:00
.9 pha
jsr OUT.PrintLineErr
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.OUT
.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
*---------------------------------------
T.LI >PSTR "ON"
>PSTR "OFF"
>PSTR "CON"
2018-01-11 16:34:09 +00:00
>PSTR "COFF"
>PSTR "MON"
>PSTR "MOFF"
2018-01-11 16:34:09 +00:00
>PSTR "XON"
>PSTR "XOFF"
2015-10-06 16:14:48 +00:00
.HS 00
*---------------------------------------
ASM.6502 .AZ "6502"
MSG.HELP .AZ "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 .AZ "Pass:#%d\r\n"
MSG.SRC.FILE .AZ "Reading SRC File:%s\r\n"
MSG.OBJ.FILE .AZ "Writing OBJ File:%s, Type=%02x\r\n"
MSG.T.FILE .AZ "Loading CPU File:%s\r\n"
MSG.OUT0 .AZ "%H- "
MSG.OUT1 .AZ "%H-%h "
MSG.OUT2 .AZ "%H-%h %h "
MSG.OUT3 .AZ "%H-%h %h %h"
2018-03-19 16:48:41 +00:00
MSG.EQU0 .AZ " [ ?]"
MSG.EQU1 .AZ " [ %h]"
MSG.EQU2 .AZ " [ %h%h]"
MSG.EQU3 .AZ " [ %h%h%h]"
MSG.EQU4 .AZ " [%h%h%h%h]"
MSG.SRCLINE .AZ " %05D %s\r\n"
MSG.ERROR .AZ "*** Fatal Error $%h "
MSG.SYMBOLS .AZ "Symbol Table:\r\n"
MSG.PSTRCRLF .AZ " %S\r\n"
MSG.SUMMARY .AZ "\r\nSymbol Table Size : %5D Bytes.\r\nEnd Of Assembly.\r\n"
SRC.MOD.RESERVED >PSTR "#/^<>"
SRC.EXP.RESERVED >PSTR "^!|&<=>+-*/"
SRC.AM.RESERVED >PSTR "[](),"
2018-01-11 16:34:09 +00:00
*---------------------------------------
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
SRC.ACC.SIZE .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.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
2018-02-01 07:16:35 +00:00
DIR.Word .BS 2
2015-12-04 16:33:33 +00:00
DIR.Byte .BS 1
EXP.Modifier .BS 1
EXP.Prefix .BS 1
EXP.Operator .BS 1
ASM.PASS .BS 1
2018-02-05 07:09:38 +00:00
ASM.DO.StackPtr .BS 1
ASM.DO.Stack .BS SRC.DO.MAXDEPTH
2015-12-04 16:33:33 +00:00
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
OUT.PC .BS 4
OUT.Buf .BS 4
OUT.bEquate .BS 1
SRC.AMID .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