mirror of
https://github.com/callapple/LLUCE.git
synced 2024-12-28 18:30:13 +00:00
322 lines
8.1 KiB
ArmAsm
322 lines
8.1 KiB
ArmAsm
|
TTL 'Overlay CRC Calculator'
|
||
|
********************************
|
||
|
* *
|
||
|
* CRC Calculator *
|
||
|
* *
|
||
|
********************************
|
||
|
LST OFF
|
||
|
LSTDO OFF
|
||
|
XC
|
||
|
TR
|
||
|
TR ADR
|
||
|
EXP ONLY
|
||
|
Y = 1
|
||
|
y = 1
|
||
|
N = 0
|
||
|
n = 0
|
||
|
NOLIST = Y
|
||
|
GSBUG = N
|
||
|
DO NOLIST
|
||
|
LISTOBJ = N
|
||
|
LISTSYM = N
|
||
|
ELSE
|
||
|
LISTOBJ KBD 'List This Source? (Y/N)'
|
||
|
LISTSYM KBD 'List Symbol Table? (Y/N)'
|
||
|
FIN
|
||
|
|
||
|
PUT EQUATES/OS.EQUATES
|
||
|
|
||
|
]TYPE = ^sysfile ; set file type
|
||
|
]AUX = sysfile ; and aux type
|
||
|
ORG ]AUX ; must be this way
|
||
|
TYP ]TYPE
|
||
|
|
||
|
DSK /RAM5/SHOW.CRC
|
||
|
DO LISTOBJ
|
||
|
LST
|
||
|
FIN
|
||
|
|
||
|
PRN = 6
|
||
|
PROMPT = $33
|
||
|
Cr = $8D
|
||
|
LNBUF = $200
|
||
|
FLNAME = $280
|
||
|
|
||
|
SOFTEV = $3F4
|
||
|
|
||
|
Quit = $65
|
||
|
Open = $C8
|
||
|
Read = $CA
|
||
|
Write = $CB
|
||
|
Close = $CC
|
||
|
Geteof = $D1 ; Get End Of File Pointer
|
||
|
|
||
|
MLI = $BF00
|
||
|
|
||
|
KBD = $C000
|
||
|
SET40 = $C00C
|
||
|
SETALTCH = $C00F
|
||
|
KBDSTRB = $C010
|
||
|
|
||
|
INIT = $FB2F
|
||
|
HOME = $FC58
|
||
|
INPLN = $FD6F
|
||
|
CROUT = $FD8E
|
||
|
PRBYTE = $FDDA
|
||
|
COUT = $FDED
|
||
|
SETNORM = $FE84
|
||
|
SETKBD = $FE89
|
||
|
SETVID = $FE93
|
||
|
RESET = $FFFC
|
||
|
|
||
|
ORG $2000
|
||
|
|
||
|
JSR SETNORM
|
||
|
JSR INIT
|
||
|
JSR SETVID
|
||
|
JSR SETKBD
|
||
|
STZ SET40 ; Set 40 Columns
|
||
|
STZ SETALTCH
|
||
|
LDA #">"
|
||
|
STA PROMPT
|
||
|
JSR STARTCRC ; Set Up CRC Tables
|
||
|
|
||
|
RESTART JSR HOME ; Control L (Clear Screen)
|
||
|
STZ CRC ; Zero CRC Count
|
||
|
STZ CRC+1
|
||
|
JSR CROUT
|
||
|
JSR PRINT
|
||
|
STR "Filename -> "
|
||
|
JSR INPLN
|
||
|
CPX #0 ; Null File Name?
|
||
|
BNE :MVNAME ; Nope
|
||
|
|
||
|
JMP EXIT
|
||
|
|
||
|
:MVNAME STX FLNAME ; Save Length Of Name
|
||
|
:NAMELUP LDA LNBUF,X ; Move Name
|
||
|
AND #$7F ; Clear Hi Bit
|
||
|
CMP #'a' ; Make It Upper Case
|
||
|
BLT :OK
|
||
|
|
||
|
CMP #'z'+1
|
||
|
BGE :OK
|
||
|
|
||
|
SBC #$1F
|
||
|
:OK STA FLNAME+1,X ; Save It
|
||
|
DEX ; Next Byte
|
||
|
CPX #-1
|
||
|
BNE :NAMELUP
|
||
|
|
||
|
JSR MLI ; Open The File
|
||
|
DB Open
|
||
|
DA OPENLST
|
||
|
BCC :OPENOK
|
||
|
|
||
|
JMP OPENERR
|
||
|
|
||
|
:OPENOK LDA OPENREF ; Move Reference Numbers
|
||
|
STA READREF
|
||
|
STA WRITEREF
|
||
|
STA CLOSEREF
|
||
|
STA EOFREF
|
||
|
JSR MLI
|
||
|
DB Geteof
|
||
|
DA EOFLST
|
||
|
JSR PRINT ; Print Size Of Code
|
||
|
DCI "Code Size: $"
|
||
|
LDA EOF+2
|
||
|
JSR PRBYTE
|
||
|
LDA EOF+1
|
||
|
JSR PRBYTE
|
||
|
LDA EOF
|
||
|
JSR PRBYTE
|
||
|
JSR CROUT
|
||
|
|
||
|
:CRCLUP JSR RDBYTE ; Read Overlay Byte
|
||
|
JSR ADDCRC ; Add To Crc
|
||
|
LDA EOF ; Bump Size Pointer
|
||
|
BNE :DWNEOF2
|
||
|
LDA EOF+1
|
||
|
BNE :DWNEOF1
|
||
|
DEC EOF+2
|
||
|
:DWNEOF1 DEC EOF+1
|
||
|
:DWNEOF2 DEC EOF
|
||
|
LDA EOF ; Done?
|
||
|
ORA EOF+1
|
||
|
ORA EOF+2
|
||
|
BNE :CRCLUP ; Nope
|
||
|
|
||
|
JSR PRINT
|
||
|
DCI "Code CRC : $"
|
||
|
LDA CRC+1
|
||
|
JSR PRBYTE
|
||
|
LDA CRC ; Move CRC To Program
|
||
|
JSR PRBYTE
|
||
|
JSR CROUT
|
||
|
|
||
|
ANOTHER JSR MLI ; Close The File
|
||
|
DB Close
|
||
|
DA CLOSELST
|
||
|
JSR PRINT
|
||
|
DB Cr
|
||
|
ASC "Do Another File? -> _"08
|
||
|
:WAIT LDA KBD ; Wait For A Keypress
|
||
|
BPL :WAIT
|
||
|
|
||
|
BIT KBDSTRB ; Clear Strobe
|
||
|
CMP #"N" ; How About A No?
|
||
|
BEQ :QUIT
|
||
|
CMP #"n"
|
||
|
BEQ :QUIT
|
||
|
|
||
|
CMP #"Y" ; Is It A Yes?
|
||
|
BEQ :AGAIN
|
||
|
|
||
|
CMP #"y"
|
||
|
BNE :WAIT
|
||
|
|
||
|
:AGAIN JSR COUT ; Print Input
|
||
|
JMP RESTART ; Start Again
|
||
|
|
||
|
:QUIT JSR COUT ; Print Input
|
||
|
EXIT JSR MLI ; Try To Quit
|
||
|
DB Quit
|
||
|
DA QUITLST
|
||
|
|
||
|
*-------------------------------
|
||
|
* Should Never Get Here
|
||
|
*-------------------------------
|
||
|
|
||
|
INC SOFTEV ; Force Cold Start
|
||
|
JMP (RESET)
|
||
|
|
||
|
OPENERR JSR PRINT
|
||
|
DB Cr
|
||
|
ASC "Error Opening File"0D
|
||
|
:N BRA ANOTHER
|
||
|
|
||
|
RDERR JSR PRINT
|
||
|
DB Cr
|
||
|
ASC "Error Reading File"0D
|
||
|
:N PLA
|
||
|
PLA
|
||
|
JMP ANOTHER
|
||
|
|
||
|
RDBYTE JSR MLI
|
||
|
DB Read
|
||
|
DA READLST
|
||
|
BCS RDERR
|
||
|
|
||
|
LDA BYTE ; Get Byte Read
|
||
|
RTS
|
||
|
|
||
|
*-------------------------------
|
||
|
* Standard In-Line Print Routine
|
||
|
*-------------------------------
|
||
|
|
||
|
PRINT PLA
|
||
|
STA PRN
|
||
|
PLA
|
||
|
STA PRN+1
|
||
|
JSR INCPRN
|
||
|
:PLOOP LDA (PRN)
|
||
|
PHP
|
||
|
ORA #$80
|
||
|
JSR COUT
|
||
|
JSR INCPRN
|
||
|
PLP
|
||
|
BMI :PLOOP
|
||
|
|
||
|
JMP (PRN)
|
||
|
|
||
|
INCPRN INC PRN
|
||
|
BNE :DONE
|
||
|
INC PRN+1
|
||
|
:DONE RTS
|
||
|
|
||
|
QUITLST DB 4
|
||
|
DS 8
|
||
|
|
||
|
OPENLST DB 3
|
||
|
DA FLNAME
|
||
|
DA IOBUF
|
||
|
OPENREF DB 0
|
||
|
|
||
|
READLST DB 4
|
||
|
READREF DB 0
|
||
|
DA BYTE
|
||
|
DA 1 ; Reading 1 Byte
|
||
|
DA 0
|
||
|
|
||
|
WRITELST DB 4
|
||
|
WRITEREF DB 0
|
||
|
DA BYTE
|
||
|
DA 1 ; Writing 1 Byte
|
||
|
DA 0
|
||
|
|
||
|
CLOSELST DB 1
|
||
|
CLOSEREF DB 0
|
||
|
|
||
|
EOFLST DB 2
|
||
|
EOFREF DB 0
|
||
|
EOF DB 0,0,0
|
||
|
|
||
|
BYTE DB 0
|
||
|
|
||
|
*===============================
|
||
|
* Calculate CRC
|
||
|
*===============================
|
||
|
|
||
|
STARTCRC LDX #0 ; Zero Crc Pages
|
||
|
:CLRCRC STZ CRCLO,X
|
||
|
STZ CRCHI,X
|
||
|
INX
|
||
|
BNE :CLRCRC
|
||
|
|
||
|
:FETCH TXA ; Set Up CRC Table
|
||
|
EOR CRCHI,X
|
||
|
STA CRCHI,X
|
||
|
LDY #8
|
||
|
:MKCRC ASL CRCLO,X
|
||
|
ROL CRCHI,X
|
||
|
BCC :LOOP1
|
||
|
|
||
|
LDA CRCHI,X
|
||
|
EOR #$10
|
||
|
STA CRCHI,X
|
||
|
LDA CRCLO,X
|
||
|
EOR #$21
|
||
|
STA CRCLO,X
|
||
|
:LOOP1 DEY
|
||
|
BNE :MKCRC
|
||
|
|
||
|
INX
|
||
|
BNE :FETCH
|
||
|
|
||
|
RTS
|
||
|
|
||
|
ADDCRC EOR CRC+1 ; Add It To Crc
|
||
|
TAX
|
||
|
LDA CRC
|
||
|
EOR CRCHI,X
|
||
|
STA CRC+1
|
||
|
LDA CRCLO,X
|
||
|
STA CRC
|
||
|
RTS
|
||
|
|
||
|
CRC DA 0
|
||
|
|
||
|
DUM CRC+2
|
||
|
|
||
|
DS \ ; Set To Page Boundary
|
||
|
CRCLO DS $100
|
||
|
CRCHI DS $100
|
||
|
IOBUF DS $400
|
||
|
DEND
|
||
|
LST OFF
|
||
|
DO LISTSYM
|
||
|
LST
|
||
|
FIN
|
||
|
|