mirror of
https://github.com/callapple/LLUCE.git
synced 2024-06-20 15:29:29 +00:00
347 lines
9.2 KiB
ArmAsm
347 lines
9.2 KiB
ArmAsm
|
TTL 'Overlay CRC Calculator'
|
||
|
********************************
|
||
|
* *
|
||
|
* Overlay 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
|
||
|
DO LISTOBJ
|
||
|
LST
|
||
|
FIN
|
||
|
LST OFF
|
||
|
|
||
|
]TYPE = ^sysfile ; set file type
|
||
|
]AUX = sysfile ; and aux type
|
||
|
ORG ]AUX ; must be this way
|
||
|
TYP ]TYPE
|
||
|
|
||
|
DSK /RAM5/OVERLAY.CRC
|
||
|
PUT EQUATES/EQUATES
|
||
|
PUT EQUATES/OS.EQUATES
|
||
|
LST RTN
|
||
|
|
||
|
FLNAME = LNBUF+$80
|
||
|
|
||
|
JSR MONSNORM
|
||
|
JSR MONINIT
|
||
|
JSR MONSVID
|
||
|
JSR MONSKBD
|
||
|
STZ DISP40 ; Set 40 Columns
|
||
|
STZ ALTCHRS
|
||
|
LDA #'>'+128
|
||
|
STA MONPROMPT
|
||
|
JSR STARTCRC ; Set Up CRC Tables
|
||
|
|
||
|
RESTART JSR MONCLS ; Control L (Clear Screen)
|
||
|
STZ CRC ; Zero CRC Count
|
||
|
STZ CRC+1
|
||
|
JSR MONCROUT
|
||
|
JSR PRINT
|
||
|
DCI 'Filename -> '
|
||
|
JSR MONINPLN
|
||
|
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
|
||
|
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 MARKREF
|
||
|
LDX #0 ; Read First 8 Bytes
|
||
|
ID JSR RDBYTE
|
||
|
STA IDBYTES,X
|
||
|
INX
|
||
|
CPX #8
|
||
|
BLT ID
|
||
|
|
||
|
JSR MONCROUT
|
||
|
JSR PRINT ; Print ID Byte
|
||
|
DCI 'ID Byte : '
|
||
|
LDA IDBYTES
|
||
|
JSR MONPRBYTE
|
||
|
JSR MONCROUT
|
||
|
JSR PRINT ; Print Auxiliary Type
|
||
|
DCI 'Aux Type : '
|
||
|
LDA IDBYTES+2
|
||
|
JSR MONPRBYTE
|
||
|
LDA IDBYTES+1
|
||
|
JSR MONPRBYTE
|
||
|
JSR MONCROUT
|
||
|
JSR PRINT ; Print Checksum Of ID
|
||
|
DCI 'Checksum : '
|
||
|
LDA IDBYTES+3
|
||
|
JSR MONPRBYTE
|
||
|
JSR MONCROUT
|
||
|
JSR PRINT ; Print Size Of Code
|
||
|
DCI 'Code Size: '
|
||
|
LDA IDBYTES+5
|
||
|
JSR MONPRBYTE
|
||
|
LDA IDBYTES+4
|
||
|
JSR MONPRBYTE
|
||
|
JSR MONCROUT
|
||
|
LDA #0 ; Checksum Overlay ID
|
||
|
LDX #0
|
||
|
IDCSUM EOR IDBYTES,X
|
||
|
INX
|
||
|
CPX #4
|
||
|
BLT IDCSUM
|
||
|
|
||
|
EOR #$A5 ; ID Ok?
|
||
|
BEQ IDOK
|
||
|
|
||
|
JMP IDERR ; Nope
|
||
|
|
||
|
IDOK LDA IDBYTES+4 ; Move Code Size
|
||
|
STA TEMP
|
||
|
LDA IDBYTES+5
|
||
|
STA TEMP+1
|
||
|
CRCLUP JSR RDBYTE ; Read Overlay Byte
|
||
|
JSR ADDCRC ; Add To Crc
|
||
|
LDA TEMP ; Bump Size Pointer
|
||
|
BNE DWNSIZE
|
||
|
|
||
|
DEC TEMP+1
|
||
|
DWNSIZE DEC TEMP
|
||
|
LDA TEMP ; Done?
|
||
|
BNE CRCLUP ; Nope
|
||
|
|
||
|
LDA TEMP+1
|
||
|
BNE CRCLUP
|
||
|
|
||
|
JSR PRINT
|
||
|
DCI 'Code CRC : '
|
||
|
LDA CRC ; Move CRC To Program
|
||
|
STA IDBYTES+6
|
||
|
LDA CRC+1
|
||
|
STA IDBYTES+7
|
||
|
JSR MONPRBYTE
|
||
|
TXA
|
||
|
JSR MONPRBYTE
|
||
|
JSR MONCROUT
|
||
|
JSR MLI ; Set Mark Back To 0
|
||
|
DB Setmark
|
||
|
DA MARKLST
|
||
|
LDX #0 ; Re-Write First 8 Bytes
|
||
|
WRID LDA IDBYTES,X
|
||
|
STA BYTE
|
||
|
JSR MLI
|
||
|
DB Write
|
||
|
DA WRITELST
|
||
|
INX
|
||
|
CPX #8
|
||
|
BLT WRID
|
||
|
|
||
|
ANOTHER JSR MLI ; Close The File
|
||
|
DB Close
|
||
|
DA CLOSELST
|
||
|
JSR PRINT
|
||
|
DB cr
|
||
|
ASC 'Do Another File? -> _'2088
|
||
|
K_WAIT LDA KYBD ; Wait For A Keypress
|
||
|
BPL K_WAIT
|
||
|
|
||
|
BIT KBDSTRB ; Clear Strobe
|
||
|
CMP #'N'+Hibit ; How About A No?
|
||
|
BEQ QUIT
|
||
|
|
||
|
CMP #'n'+Hibit ; How About A No?
|
||
|
BEQ QUIT
|
||
|
|
||
|
CMP #'Y'+Hibit ; Is It A Yes?
|
||
|
BEQ AGAIN
|
||
|
|
||
|
CMP #'y'+Hibit
|
||
|
BNE K_WAIT
|
||
|
|
||
|
AGAIN JSR MONCOUT ; Print Input
|
||
|
JMP RESTART ; Start Again
|
||
|
|
||
|
QUIT JSR MONCOUT ; Print Input
|
||
|
EXIT JSR MLI ; Try To Quit
|
||
|
DB Quit
|
||
|
DA QUITLST
|
||
|
|
||
|
*-------------------------------
|
||
|
* Should Never Get Here
|
||
|
*-------------------------------
|
||
|
|
||
|
INC SOFTEV ; Force Cold Start
|
||
|
JMP (MONRESET)
|
||
|
|
||
|
OPENERR JSR PRINT
|
||
|
DB cr
|
||
|
ASC 'Error Opening File'8D
|
||
|
BRA ANOTHER
|
||
|
|
||
|
IDERR JSR PRINT
|
||
|
DB cr
|
||
|
ASC 'Invalid Overlay ID'0D0D
|
||
|
ASC 'Probably Not An Overlay'8D
|
||
|
JMP ANOTHER
|
||
|
|
||
|
RDERR JSR PRINT
|
||
|
DB cr
|
||
|
ASC 'Error Reading File'8D
|
||
|
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
|
||
|
BRA PR2
|
||
|
|
||
|
PR1 LDA (PRN)
|
||
|
PHP
|
||
|
ORA #Hibit
|
||
|
JSR MONCOUT
|
||
|
PLP
|
||
|
BMI PR3
|
||
|
|
||
|
PR2 INC PRN
|
||
|
BNE PR1
|
||
|
|
||
|
INC PRN+1
|
||
|
BRA PR1
|
||
|
|
||
|
PR3 LDA PRN+1
|
||
|
PHA
|
||
|
LDA PRN
|
||
|
PHA
|
||
|
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
|
||
|
|
||
|
MARKLST DB 2
|
||
|
MARKREF DB 0
|
||
|
DB 0,0,0
|
||
|
|
||
|
BYTE DB 0
|
||
|
|
||
|
IDBYTES DS 8
|
||
|
|
||
|
*===============================
|
||
|
* Calculate CRC
|
||
|
*===============================
|
||
|
|
||
|
STARTCRC LDX #0 ; Zero Crc Pages
|
||
|
CLRCRC STZ CRCBUFLO,X
|
||
|
STZ CRCBUFHI,X
|
||
|
INX
|
||
|
BNE CLRCRC
|
||
|
|
||
|
FETCH TXA ; Set Up CRC Table
|
||
|
EOR CRCBUFHI,X
|
||
|
STA CRCBUFHI,X
|
||
|
LDY #8
|
||
|
MKCRC ASL CRCBUFLO,X
|
||
|
ROL CRCBUFHI,X
|
||
|
BCC LOOP1
|
||
|
|
||
|
LDA CRCBUFHI,X
|
||
|
EOR #>$1021
|
||
|
STA CRCBUFHI,X
|
||
|
LDA CRCBUFLO,X
|
||
|
EOR #<$1021
|
||
|
STA CRCBUFLO,X
|
||
|
LOOP1 DEY
|
||
|
BNE MKCRC
|
||
|
|
||
|
INX
|
||
|
BNE FETCH
|
||
|
|
||
|
RTS
|
||
|
|
||
|
ADDCRC EOR CRC+1 ; Add It To Crc
|
||
|
TAX
|
||
|
LDA CRC
|
||
|
EOR CRCBUFHI,X
|
||
|
STA CRC+1
|
||
|
LDA CRCBUFLO,X
|
||
|
STA CRC
|
||
|
RTS
|
||
|
|
||
|
CRC DA 0
|
||
|
|
||
|
DUM CRC+2
|
||
|
|
||
|
DS \ ; Set To Page Boundary
|
||
|
CRCBUFLO DS $100
|
||
|
CRCBUFHI DS $100
|
||
|
IOBUF DS $400
|
||
|
DEND
|
||
|
LST OFF
|
||
|
DO LISTSYM
|
||
|
LST
|
||
|
FIN
|
||
|
|