LLUCE/SOURCE/SETUP.ASM

449 lines
6.6 KiB
NASM

MCOPY MERLIN.MACROS
MCOPY MY.MACROS
TRANSLATION START
LCLA &LUP
TITLE 'Serial number encoder'
********************************
* *
* LLUCE Serial Number Encoder *
* *
********************************
LIST OFF
TRACE OFF
EXPAND OFF
EXPAND ON
KEEP /MAIN/LLUCE/SETUP
COPY EQUATES/EQUATES
COPY EQUATES/OS.EQUATES
cls EQU ff+Hibit
DEFFLG EQU LSTPTR
FLNAME EQU LNBUF+$80
OURNAME EQU $800
IOBUFFER EQU $1800
PROGRAM EQU $2000
BUFSIZE EQU $9B00-PROGRAM
LDA #cls
JSR MONCOUT
LDA #$A Set Up For Get Info
STA INFOLST
LDA #<BUFSIZE Reset Buffer Size
STA REQUEST
LDA #>BUFSIZE
STA REQUEST+1
JSR MLI Get Info Of File
DC I1'Getinfo'
DC I'INFOLST'
BCS ERROR
JMP FOUND
ERROR CMP #$44
BNE TRY45
JSR NOISE
DCI 'Path not found'
BRA ERRFIN
TRY45 CMP #$45
BNE TRY46
JSR NOISE
DCI 'Volume not found'
BRA ERRFIN
TRY46 CMP #$46
BNE FATAL
JSR NOISE
DCI 'File not found'
BRA ERRFIN
FATAL JSR NOISE
ASC 'Fatal disk error','0D0D'
DCI 'Press a key to quit '
JSR GETKEY
JMP SN_QUIT
ERRFIN JSR MONCROUT
JSR MONCROUT
JSR PRFN
JSR MONCROUT
JMP ASK_AGN
FOUND JSR SETUP
DCI 'Reading '
JSR PRFN
JSR MONCROUT
LDA #Read
JSR DO_FILE Read In The File
LDA PROGRAM+2 Point To Encoder Start
LDX PROGRAM+1
STA TEMP2+1
STX TEMP2
SEC Get End Address
SBC #>PROGRAM Subtract Loading Adr.
INX
BNE INC_PGM
INC A
INC_PGM STX REQUEST Store For Later Save
STA REQUEST+1
LDY #2 Already Encoded?
LDA #$EE
CMP (TEMP2),Y
BNE ISDONE Yes
INY
CMP (TEMP2),Y
BEQ DO_ENC Nope, Do It
ISDONE JSR NOISE
DCI 'This copy of '
JSR PRFN
JSR PRINT
ASC ' is already encoded','8D'
JMP ASK_AGN
DO_ENC LDY #4 Get location of serial #
LDA (TEMP2),Y
PHA
INY
LDA (TEMP2),Y
STA TEMP2+1
PLA
STA TEMP2 Is it a demo copy?
ORA TEMP2+1
BNE DO_ENC2
JMP DEF yes, don't alter serial number
DO_ENC2 STZ DEFFLG
JSR SETUP
DCI 'Last serial number was: '
LDA SERIAL
JSR MONPRBYTE
LDA SERIAL+1
JSR MONPRBYTE
JSR MONCROUT
JSR SETUP Check To Use Default
DCI 'Use next serial number?'
JSR GETYN
BNE DEF Use The Default
JSR SETUP
DCI 'Enter new serial number -> '
LDA #'>'+Hibit
STA MONPROMPT
LDA #0
STA MONMODE
JSR MONINPLN
CPX #5
BLT SIZE1
JMP DO_ENC
SIZE1 CPX #0
BNE SIZE2
JMP DO_ENC
SIZE2 LDY #0
JSR MONGETNUM
LDA a2
STA SERIAL+1
LDA a2+1
STA SERIAL
DEC DEFFLG
DEF JSR SETUP
DCI 'Encoding '
JSR PRFN
LDA TEMP2 Changing serial number?
ORA TEMP2+1
BNE PUTSN0 yes, do it
JSR PRINT
DCI ' (DEMO)'
JSR MONCROUT no, CR and do CRC
BRA PUTSN3
PUTSN0 JSR PRINT
DCI ' #'
BIT DEFFLG If Not Default, Don't Read
BPL PUTSN1
LDA SERIAL+1
CLC
BRA PUTSN2
PUTSN1 SED Add 1 In Decimal Mode
CLC (0000-9999)
LDA SERIAL+1
ADC #1
STA SERIAL+1
PUTSN2 PHA Save For Later
LDA SERIAL
ADC #0
STA SERIAL
CLD
LDY #3 Start Of Actual Serial #
JSR SVNUM Stuff In Program
PLA Get Next Byte
JSR SVNUM
JSR MONCROUT
JSR DO_SER
PUTSN3 STZ SETALTZP Will Die If Not Done
LDA #1 Tell The Encode Routine
STA TEMP That It's Ok To Do It's
INC A Thing.
STA TEMP+1
JSR PROGRAM Make It Do It's Thing
STZ SETSTDZP Back To Normal
PHY Save CRC
PHA
LDX #3 Move Creation Date
MV_DATE LDA DATE2,X
STA DATE1,X
DEX
BPL MV_DATE
JSR MLI Shoot The Old One
DC I1'Destroy'
DC I'KILLLIST'
JSR SETUP
DCI 'Writing '
JSR PRFN
JSR PRINT
DCI ' CRC=$'
PLA
JSR MONPRBYTE
PLA
JSR MONPRBYTE
JSR MONCROUT
LDA #7 Set Up For Create
STA INFOLST
JSR MLI Make A New File
DC I1'Create'
DC I'INFOLST'
LDA #Write Write It All Out
JSR DO_FILE
ASK_AGN JSR SETUP
DCI 'Do another?'
JSR GETYN
BEQ SN_QUIT
JSR SETUP
ASC 'Insert next disk','0D0D'
DCI 'Press RETURN to continue'
JSR GETKEY
JMP START Do It Again
SN_QUIT JSR MONCROUT
JSR MLI See You Later
DC I1'Quit'
DC I'QUITLST'
INC SOFTEV How Did We Get Here?
JMP (MONRESET) Do A Cold Reset
GETKEY JSR MONKEYIN Get A Key
CONV CMP #'a'+Hibit Make Upper Case
BLT CONV2
CMP #+('z'+1)+Hibit
BGE CONV2
SBC #$1F
CONV2 RTS
GETYN JSR PRINT
DCI ' (Y/N): '
YN_WAIT JSR GETKEY
CMP #'N'+Hibit Is In A NO?
BEQ GOT_NO If It Is, Quit
CMP #'Y'+Hibit Is It A Yes?
BNE YN_WAIT If It Isn't, Try Again
JSR PRINT Prompt For Next Disk
ASC 'Yes','8D'
LDA #1
RTS
GOT_NO JSR PRINT
ASC 'No','8D'
LDA #0
RTS
DO_FILE STA RWTYPE Save Read/Write
JSR MLI Open The File
DC I1'Open'
DC I'OPENLST'
LDA OPENREF Move The References
STA RWREF
STA CLOSEREF
JSR MLI Read/Write The File
RWTYPE DC I1'Read'
DC I'RWLIST'
JSR MLI Close It Up
DC I1'Close'
DC I'CLOSELST'
RTS
DO_SER JSR MLI Open The File
DC I1'Open'
DC I'OPENME'
LDA MYOREF Move The References
STA MYWRREF
STA CLOSEREF
STA MYMRKREF
JSR MLI get our file size
DC I1'Geteof'
DC I'MYMRKLST'
SEC number is at eof-2
LDA MYMRK
SBC #2
STA MYMRK
BCS SETMRK
DEC MYMRK+1
SETMRK JSR MLI set the mark
DC I1'Setmark'
DC I'MYMRKLST'
JSR MLI write the serial number
DC I1'Write'
DC I'MYWRLIST'
JSR MLI close up
DC I1'Close'
DC I'CLOSELST'
RTS
*-------------------------------
* Print And Save Hex Byte
*-------------------------------
SVNUM PHA Save Byte For Later
LSR A Move Down The High Nibble
LSR A
LSR A
LSR A
ORA #'0' Make Ascii
STA (TEMP2),Y Stuff It
ORA #Hibit
JSR MONCOUT
DEY Next Number
PLA Get Back Byte
AND #$F Strip Off High Nibble
ORA #'0' Make It Ascii
STA (TEMP2),Y Stuff It Too
ORA #Hibit
JSR MONCOUT
DEY Point To Next Number
RTS
*-------------------------------
* Print Following Text
*-------------------------------
NOISE JSR PRINT
DC I1'cr,cr,bel,bel+Hibit'
SETUP JSR PRINT
DC I1'cr'
DCI 'SETUP: '
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
*-------------------------------
* Print Name Of File
*-------------------------------
PRFN LDX FLNAME Get Filename Length
STX PRN Save For Count
LDY #1 Start At First Char.
FNLOOP LDA FLNAME,Y
ORA #Hibit Must Have Hi Bit Set
JSR CONV
JSR MONCOUT
INY
DEC PRN Any More?
BNE FNLOOP Yes
RTS
INFOLST DC I1'10' INFO/CREATE
DC I'FLNAME' Path Name
DC I1'0' Access
DC I1'0' File Type
DC I'0' Aux Type
DC I1'0' Storage Type
DATE1 DC I'0' Blocks Used/Create Date
DC I'0' Mod Date/Create Time
DC I'0' Mod Time
DATE2 DC I'0' Create Date
DC I'0' Create Time
KILLLIST DC I1'1'
DC I'FLNAME'
OPENLST DC I1'3'
DC I'FLNAME'
DC I'IOBUFFER'
OPENREF DC I1'0'
RWLIST DC I1'4'
RWREF DC I1'0'
DC I'PROGRAM'
REQUEST DC I'BUFSIZE'
DC I'0'
CLOSELST DC I1'1'
CLOSEREF DC I1'0'
OPENME DC I1'3'
DC I'OURNAME'
DC I'IOBUFFER'
MYOREF DC I1'1'
MYMRKLST DC I1'2'
MYMRKREF DC I1'0'
MYMRK MDS 3
MYWRLIST DC I1'4'
MYWRREF DC I1'0'
DC I'SERIAL'
DC I'2'
DC I'0'
QUITLST DC I1'4'
DC I1'0'
DC I'0'
DC I'0'
DC I'0'
LLUCE_NM STR 'LLUCE.SYSTEM'
SERIAL MDS 2
;