mirror of
https://github.com/callapple/LLUCE.git
synced 2024-09-28 22:55:09 +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
|
|
|