URL
https://opencores.org/ocsvn/System09/System09/trunk
Subversion Repositories System09
Compare Revisions
- This comparison shows the changes necessary to convert path
/System09/trunk/src/Flex9
- from Rev 99 to Rev 120
- ↔ Reverse comparison
Rev 99 → Rev 120
/flex9ide.sh
1,3 → 1,3
../../Tools/as09/as09.exe flex9ide.asm -l > flex9ide.lst |
../../Tools/epedit/epedit.exe flex9ide.aux |
|
../../Tools/as09/as09_dos.exe flex9ide.asm -l > flex9ide.lst |
../../Tools/epedit/epedit.exe flex9ide.aux |
|
/flex9ram.asm
9,5 → 9,5
INCLUDE "f9-cli.txt" |
INCLUDE "f9-monio.txt" |
INCLUDE "f9-fms.txt" |
INCLUDE "f9-dkram.txt" |
INCLUDE "f9-monex.txt" |
END COLDS |
/F9-MONEX.S19
0,0 → 1,66
S123DE000E570E5B0E5F0E630E6C0E9F0EA30EA70EBF0EC300000000000000000000000027 |
S10BDE20000102031040FFFFA2 |
S1230000079C0117013F013D013D013D013D013D0052005200520117013F013D013D013DA3 |
S1230020013D013D005200520052005200520052005200520052005200520052005201789D |
S123004001E70247024C024C024C024C0052005200525F5D1CFE396E9FDE326E9FDE346E84 |
S12300609FDE368D072701396E9FDE383430E603F7DE1E8EDE2AA68581FF26083530C60FC8 |
S12300805D1A0139C6143D8E0002308B108EDE32C614A680A7A05A26F935306E9FDE3A6EE3 |
S12300A09FDE3C6E9FDE3E4FB7DE1E8EDE1B8DBC2504AD9FDE40B6DE1E4C810426EA396EBB |
S12300C09FDE426E9FDE441FA8B7DE221A50CEDE2AF6DE1EE6C5CEDE2EB6DE1FABC584F062 |
S12300E0A7E2B6DE208001880F840FABE09700B6DE1F840F8B005F1F03398600880F9700B3 |
S1230100B6DE221F8A39B7DE1FF7DE201CFE1A0439C6405D1A0139347017FFEA17FFA81000 |
S12301208EDE465FA6C0A7A05A26F917FFCC108EDE465FA6A0A7805A26F95F35F05F39344B |
S12301407017FFC2CEDE2AF6DE1EE6C5C1012707C100270316FFBA108EDE465FA680A7A0A8 |
S12301605A26F917FF61108EDE465FA6A0A7C05A26F917FF855F35F0340434027FDE217FBA |
S1230180DE228673BD0281244CB6DE1EBD028124443502BD0281243D3502BD028124365F50 |
S12301A0BD02652430A780BBDE22B7DE2224037CDE215A26EBBD0265241B3402BD0265243C |
S12301C0141F89350210B3DE21260E8606BD028124035F200DC61020098615BD028124F5C0 |
S12301E0C609F7DE215D39340434027FDE217FDE228672BD028124DDB6DE1EBD028124D511 |
S12302003502BD028124CE3502BD028124C75FA680BD028124BFBBDE22B7DE2224037CDE74 |
S1230220215A26EBB6DE21BD028124A9B6DE22BD028124A1BD0265249C810626035F20029C |
S1230240C60AF7DE215D39F6DE215D398651BD0281240CBD02652407810626035F2004C624 |
S1230260101A015D3934308E03E8108E04E2960047250A313F26F7301F26EF35B0960135AA |
S1230280B0343034028E03E8108E04E296004747250C313F26F6301F26EE350235B035027C |
S12302A0970135B00A0D466F726D6174696E672052414D6469736B2E2E2E20040A0D045239 |
S12302C0616D6469736B206E6F7420616C6C6F63617465642120048E02A4BD04508EDE2A47 |
S12302E05FA6858101270C5CC10426F58E02BCBD045039F7DE1E8EDE1B9D6C8EDE464F5F06 |
S1230300A7805A26FB7FDE1F8601B7DE208EDE46B6DE1FA784B6DE204C810F26046C8486BF |
S123032001A701B6DE1FF6DE209D5B7CDE20B6DE20810F26D88601B7DE207CDE1FB6DE1F4D |
S1230340814026C98EDE46863FC60E9D578EDE466F846F01863FC60E9D5B8EDE464FC60E2F |
S12303609D578EDE466F846F014FC60E9D5B8EDE464FC6039D578EDE466F846F01CC524123 |
S1230380ED8810CC4D44ED8812CC4953ED8814CC4B20ED8816CC0001ED881BCC0101ED889D |
S12303A01D863FC60EED881FED8826CC0372ED88218601A788238607A788248607A78825E3 |
S12303C04FC6039D5B8EDE464FC6019D578EDE4686AAA7848655A7014FC6010E5B080842EC |
S12303E06F6F74696E6720696E7465726E616C20464C45582E2E2E2E0D0A048E03DDBD049B |
S1230400508ED3E5108E0424ECA1ED818CD3FD26F78EDE00108E043CECA1ED818CDE1E2615 |
S1230420F77ECD00045C046800020008046804680468046404680460045404580E570E5BA2 |
S12304400E5F0E630E6C0E9F0EA30EA70EBF0EC36E9F00006E9F00006E9F00006E9F00005B |
S12304606E9F00006E9F00003953657269616C20524F4D204469736B2075706C6F61642047 |
S12304802E2E2E0D0A04524F4D204469736B204C6F616465640D0A048E0469BD0450860004 |
S12304A0B7DE1E4FC601B7DE1FF7DE2017FC185FBD04D3A7C05A26F817FC3FB6DE1FF6DEF0 |
S12304C0205CC10F26E0C6014C813026D98E04867E045034048D0E484848481F898D0634B7 |
S12304E004ABE03584BD050B29FB80302BF781092F0A81112BEF81162EEB800739960085F3 |
S123050001398603970086119700398610B7DE277FDE287FDE299600850126088578270942 |
S12305208DE020E796011C02397ADE2926E87ADE2826E37ADE2726DE4F1A0239340296004A |
S123054085022608857827F68DB820F235029701390D0A586D6F64656D20524F4D2044690D |
S1230560736B2055706C6F6164040D0A55706C6F616420436F6D706C657465040D0A55705B |
S12305806C6F6164204572726F72048E055117FEBF8601B7DE238E05F9BFDE258600B7DE29 |
S12305A01E4FC601B7DE1FF7DE2017FB1A5F17002B2520A7C05A26F617FB3FB6DE1FF6DE93 |
S12305C0205CC10F26DEC6014C813026D78E056A7E045017FB248E057C16FE743410BEDE8A |
S12305E02517FF27280A861517FF518E05F920F1AD8426EDBFDE253590810126068E06199E |
S12306001CFA3981042608860617FF301A0539811826031A05391CFA39B1DE2326068E06CF |
S12306202F1CFA39861517FF138E05F91CFA3943B1DE2326EF7FDE218680B7DE248E06437B |
S12306401CFA393402BBDE21B7DE2135027ADE2426038E065A1CFE1A0439B1DE2126077C0D |
S1230660DE238606200D34041F305AC4801F033504861517FEC68E05F91CFA3908084C6F20 |
S1230680616420524F4D206469736B2066726F6D20636F6E6669672050524F4D2E04466F09 |
S12306A0756E642053594E432C206C6F6164696E6720646174612E2E2E0A0D04524F4D20FB |
S12306C04469736B204C6F616465642E0A0D04524F4D204469736B204E6F7420466F756E37 |
S12306E0642E0A0D048E067CBD04508D5A108E00208E00008D6C8D7C2715301F8C000026B6 |
S1230700F3311F108C000026EB8E06CF7E04508E069EBD04504FB7DE1EC601B7DE1FF7DE1B |
S12307202017F9A35F8D67A7C05A26F917F9CBB6DE1FF6DE205CC10F26E1C6014C81302610 |
S1230740DA8E06BC7E045086009700860097008E0000301F8C000026FBBFDF46BFDF4839D2 |
S1230760860097008600970096004478DF493979DF4879DF4779DF46CC000010B3DF4826CF |
S12307800CCC000010B3DF46393404C6088DD35A2600B6DF49358417FCBE847F1F898620BD |
S12307A017FCB1C1602F07C0208E07C4E180271230028C07D326FA8E07D316FC936E94423E |
S11A07C003FB4C04984602D75006E558058B57484154203F0A0D0448 |
S9030000FC |
/f9-monex.txt
0,0 → 1,1304
* |
** FLEX 9 DISK DRIVERS |
* |
* FOR SYS09BUG ON THE |
* DIGILENT SPARTAN 3 STARTER BOARD AND |
* TERASIC CYCLONE 2 DE1 BOARD |
* WITH I/O MAPPED AT $XE000 |
* AND ROM MAPPED AT $XF000 |
* THE DIGILENT SPARTAN 3 STARTER BOARD HAS 1MBYTE OF SRAM |
* THE TERASIC CYCLONE 2 DE1 BOARD HAS 512KBYTE OF SRAM |
* THE FIRST 64K IS USED BY FLEX, |
* THE SECOND 128K IS USED AS A ROM DISK |
* THE REMAINING RAM IS USED FOR A RAM DISK |
* |
* |
CFLAG EQU $01 CARRY FLAG |
VFLAG EQU $02 OVERFLOW FLAG |
ZFLAG EQU $04 ZERO FLAG |
NFLAG EQU $08 NEGATIVE FLAG |
IFLAG EQU $10 IRQ MASK CC |
HFLAG EQU $20 HALF CARRY |
FFLAG EQU $40 FIRQ MASK CC |
EFLAG EQU $80 ENTIRE FLAG |
* |
MAPPAG EQU $00 PAGE $0000 DAT ADDRESS |
DATREG EQU IC11 DAT REGISTERS |
* |
* Serial Port |
* |
ACIAC1 EQU ACIAS |
ACIAD1 EQU ACIAS+1 |
DELCON EQU 1250 Delay (Processor clock in MHz * 50) |
* |
* XMODEM Control characters |
* |
SOH EQU $01 |
EOT EQU $04 |
ACK EQU $06 |
NAK EQU $15 |
CAN EQU $18 |
* |
* DRIVE GEOMETRY |
* |
EMAXSEC EQU 14 ROM DISK |
EMAXTRK EQU 48 3 * 16 * 14 * 256 = 172,032 Bytes |
ETOTSEC EQU EMAXTRK*EMAXSEC-EMAXSEC |
* |
RMAXSEC EQU 14 RAM DISK |
*RMAXTRK EQU 192 12 * 16 * 14 * 256 = 688,128 Bytes Digilent Spartan 3 |
RMAXTRK EQU 64 4 * 16 * 14 * 256 = 229,376 Bytes Terasic Cyclone 2 |
RTOTSEC EQU RMAXTRK*RMAXSEC-RMAXSEC |
* |
* DRIVE TYPES |
* |
DTYPROM EQU 0 ROM DISK |
DTYPRAM EQU 1 RAM DISK |
DTYPFLS EQU 2 FLASH DISK |
DTYPNET EQU 3 FLEXNET DISK |
* |
ORG $DE00 |
* |
* DISK DRIVER JUMP TABLE LAST UPDATE: 22/12/2006 |
* Disk driver for RAM Disk. |
* |
* 14 SECTORS PER TRACK |
* 16 * N TRACKS PER DISK |
* |
* ROM DISK OCCUPIES $10000 - $1E000 ... $30000 - $3E000 |
* RAM DISK OCCUPIES $40000 - $4E000 ... $F0000 - $FE000 |
* Track Buffer page mapped at $E000 - $EFFF |
* MAPPAG = $00 = 0 x $1000 (4 K pages) |
|
* ON SWTPC ROM AT $XF000 AND IO AT $XE000 |
* APPEARS THROUGHOUT THE MEMORY SO MUST BE SKIPPED OVER |
* WHEN USING RAM AS A RAMDISK. |
* THE MSN OF THE TRACK MAPS INTO THE MSN OF THE DAT |
* THE LSN OF THE TRACK NUMBER INDEXES INTO THE 4K RAM PAGE |
* THE SECTOR MAPS INTO THE LSN OF THE DAT WHICH IS INVERTED |
* |
* |
* |
* FLEX disk jump table. |
* |
READ JMP READSC |
WRITE JMP WRITSC |
VERIFY JMP BUSY |
RESTOR JMP RESTR1 |
DRIVE JMP DRVSEL |
DRVRDY JMP CHKRDY |
QUICK JMP CHKQIK |
COLDDR JMP DINIT |
WARMDR JMP DWARM |
SEEK JMP SEEKTS |
* |
* RAM SPACE |
* |
DRVNUM FCB 0 |
TRACK FCB 0 |
SECTOR FCB 0 |
CHKSUM FCB 0 |
CCSAVE FCB 0 |
BLKNUM FCB 0 Xmodem block number |
BYTCNT FCB 0 Xmodem byte count |
XSTATE FDB 0 Xmodem State Vector |
DELCNT FCB $00,$00,$00 Xmodem Poll timer |
* |
* Disc driver type table. |
* Indexed by drive number |
* |
DTYPTAB FCB DTYPROM Drive 0 (ROM Disk) |
FCB DTYPRAM Drive 1 (RAM Disk) |
FCB DTYPFLS Drive 2 (FLASH Disk) |
FCB DTYPNET Drive 3 (NETPC Disk) |
* |
* RAM Disk offset |
* Indexed by drive type |
* |
DOFFTAB FCB $10 ROM Disk $10000 |
FCB $40 RAM DISK $40000 |
FCB $FF Flash Disk |
FCB $FF NETPC Disk |
* |
REAVEC RMB 2 Disc driver jump table. |
WRIVEC RMB 2 |
VERVEC RMB 2 |
RSTVEC RMB 2 |
DRVVEC RMB 2 |
CHKVEC RMB 2 |
QUIVEC RMB 2 |
INIVEC RMB 2 |
WARVEC RMB 2 |
SEEVEC RMB 2 |
* |
* SECTOR BUFFER |
* |
BUFFER RMB 256 |
SYNCREG RMB 4 Prom input register |
* |
**************************************** |
* |
* START OF EXTENSION COMMANDS |
* |
**************************************** |
* |
ORG MONEXT |
FDB NEXTEXT Jump to next extended command |
* |
* |
***************************************** |
* Disk drivers * |
* ------------ * |
* The system dependant code for the * |
* disc drivers fits here. Two tables * |
* must be included. These are DTYPTAB a * |
* four byte table that defines which of * |
* the (up to four) following sets of * |
* jump tables to use, and TABSRT the * |
* jump tables themselves. For a full * |
* description of the floppy drivers see * |
* section 4 (pp9-14) of the general * |
* Flex adaptation guide. * |
***************************************** |
* |
* Mass storage drivers for embedded applications. |
* |
* Jump tables. |
TABSRT FDB EREAD Drive type 0 (ROM disk). |
FDB EWRITE |
FDB ECHECK |
FDB ECHECK |
FDB ECHECK |
FDB ECHECK |
FDB ECHECK |
FDB DDUMMY |
FDB DDUMMY |
FDB DDUMMY |
* |
FDB EREAD Drive type 1 (RAM disk). |
FDB EWRITE |
FDB ECHECK |
FDB ECHECK |
FDB ECHECK |
FDB ECHECK |
FDB ECHECK |
FDB DDUMMY |
FDB DDUMMY |
FDB DDUMMY |
* |
FDB DDUMMY Drive type 2 (External Flash disk). |
FDB DDUMMY |
FDB DDUMMY |
FDB DDUMMY |
FDB DDUMMY |
FDB DDUMMY |
FDB DDUMMY |
FDB DDUMMY |
FDB DDUMMY |
FDB DDUMMY |
* |
FDB NREAD Drive type 3 (NetPC drive via serial port). |
FDB NWRITE |
FDB NVERIFY |
FDB NCHECK |
FDB NCHECK |
FDB NCHECK |
FDB NCHECK |
FDB DDUMMY |
FDB DDUMMY |
FDB DDUMMY |
* |
* |
* Dummy routine (no errors). |
DDUMMY CLRB |
TSTB Set (z)=1 |
ANDCC #$FF-CFLAG Set (c)=0 |
RTS |
* * |
************************** |
* Main Flex entry points * |
************************* |
* |
* Read sector routine. |
* Entry: (X) = address where sector is to be placed. |
* (A) = Track number. |
* (B) = Sector number. |
* Exit: (B) = Error code (z)=1 if no error. |
READSC JMP [REAVEC] |
* |
* Write track routine. |
* Entry: (X) = Address of area of memory from which the data will be taken. |
* (A) = Track number. |
* (B) = Sector number. |
* Exit: (B) = Error condition, (Z)=1 no an error. |
WRITSC JMP [WRIVEC] |
* |
* Verify sector routine. |
* Entry: no parameters. |
* Exit: (B) = Error condition (Z)=1 if no error. |
BUSY JMP [VERVEC] |
* |
* Restore drive to track 00. |
* Entry: (X) = FCB address (3,X contains drive number). |
* Exit: (B) = Error condition, (Z)=1 if no error. |
RESTR1 BSR DRVSEL Select drive first. |
BEQ RST1 |
RTS |
RST1 JMP [RSTVEC] |
* |
* Select current drive. |
* Entry: (X) = FCB address (3,X contains drive number). |
* Exit: (B) = Error condition, (Z)=0 and (c)=1 if error. |
* (B) = $0F if non existant drive. |
DRVSEL PSHS X,Y |
LDB 3,X Get driver type. |
STB DRVNUM |
LDX #DTYPTAB |
LDA B,X |
CMPA #$FF Is the drive nonexistant? |
BNE DRIVE1 |
PULS X,Y |
LDB #$0F |
TSTB |
ORCC #$01 |
RTS |
* |
DRIVE1 LDB #20 Get correct table start address. |
MUL |
LDX #TABSRT |
LEAX D,X |
LDY #REAVEC Copy table into ram. |
LDB #20 |
DRIVE2 LDA 0,X+ |
STA 0,Y+ |
DECB |
BNE DRIVE2 |
PULS X,Y |
JMP [DRVVEC] |
* |
* Check for drive ready. |
* Entry: (X) = FCB address (3,X contains drive number)> |
* Exit: (B) = Error condition, (Z)=0 AND (C)=1 if drive is not ready. |
CHKRDY JMP [CHKVEC] |
* |
* Quick drive ready check. |
* Entry: (X) = FCB address (3,X contains drive number). |
* Exit: (B) = Error condition, (Z)=0 AND (c)=1 if drive not ready. |
CHKQIK JMP [QUIVEC] |
* |
* Init (cold start). |
* Entry: no parameters. |
* Exit: no change. |
DINIT CLRA |
DINIT1 STA DRVNUM Init each valid drive in turn. |
LDX #DRVNUM-3 |
BSR DRVSEL |
BCS DINIT2 |
JSR [INIVEC] |
DINIT2 LDA DRVNUM |
INCA |
CMPA #4 |
BNE DINIT1 |
RTS |
* |
* Warm start. |
* Entry: no parameters. |
* Exit: no change. |
DWARM JMP [WARVEC] |
* |
* Seek track. |
* Entry: (A) = Track number. |
* (B) = Sector number. |
* Exit: (B) = Error condition, (Z)=1 if no error. |
SEEKTS JMP [SEEVEC] |
* |
* |
***************************************************** |
* ROMdisk drivers * |
* --------------- * |
* Drivers to support a ROMdisk in the external RAM * |
* of the SYS09. The ROMdisk base address is $10000 * |
***************************************************** |
* Dummy return for ROM disk (write protected!) |
* |
* MAP RAM DISK INTO MEMORY SPACE |
* |
MAPIN TFR CC,A ; Save state of interrupt masks |
STA CCSAVE |
ORCC #FFLAG+IFLAG ; Mask interrupts while IO mapped out |
LDU #DTYPTAB ; Point to Drive Type table |
LDB DRVNUM ; Get working drive number |
LDB B,U |
LDU #DOFFTAB |
LDA TRACK |
ADDA B,U ; Add Base offset into RAM |
ANDA #$F0 ; Mask MSN |
STA ,-S ; Save A on stack |
* |
LDA SECTOR |
SUBA #1 ; Sectors 1 to 14 => 0 to 13 |
EORA #$0F ; Complement LSNybble |
ANDA #$0F |
* |
ADDA ,S+ ; Add sector to LSN of Track and pop |
STA DATREG+MAPPAG |
* |
LDA TRACK ; LSN of Track indexes into 4K page |
ANDA #$0F |
ADDA #MAPPAG*16 |
CLRB |
TFR D,U |
RTS |
* |
* MAP RAM DISK OUT OF MEMORY |
* |
MAPOUT LDA #MAPPAG ; Point to the Flex page |
EORA #$0F ; Complement LSNybble |
STA DATREG+MAPPAG ; map in Flex page |
LDA CCSAVE ; restore interrupt masks |
TFR A,CC |
RTS |
* |
* Seek track and sector |
* A holds track number (0-32) |
* B holds sector number (1-14) |
* |
ESEEK STA TRACK |
STB SECTOR |
ANDCC #$FE ; CLEAR CARRY |
ORCC #$04 ; SET Z |
RTS |
* |
* MARK DISK READ ONLY |
* |
EDUMMY LDB #$40 |
TSTB |
ORCC #$01 |
RTS |
* |
EREAD PSHS X,Y,U push sequentialy to preserve order on stack |
LBSR ESEEK |
LBSR MAPIN build external ram address |
* |
LDY #BUFFER |
CLRB |
ERLOOP1 LDA 0,U+ move 256 bytes to buffer from external RAM |
STA 0,Y+ |
DECB |
BNE ERLOOP1 |
* |
LBSR MAPOUT |
* |
LDY #BUFFER |
CLRB |
ERLOOP2 LDA 0,Y+ move 256 bytes from buffer to Flex RAM |
STA 0,X+ |
DECB |
BNE ERLOOP2 |
* |
CLRB |
PULS X,Y,U,PC restore all registers |
* |
* check for marker bytes $AA55 in first bytes of first track/sector |
* |
*ECHECK CLRA |
* LDB #1 |
* LDX #BUFFER |
* BSR EREAD |
* LDD BUFFER |
* CMPD #$AA55 |
* BNE EERR |
* LBRA DDUMMY |
*EERR LDB #$80 not ready bit set |
* TSTB |
* ORCC #$01 |
* RTS |
ECHECK CLRB |
RTS |
* |
* Write Sector |
* |
EWRITE PSHS X,Y,U |
LBSR ESEEK |
LDU #DTYPTAB ; Point to Drive Type table |
LDB DRVNUM ; Get working drive number |
LDB B,U ; Fetch Drive type |
CMPB #DTYPRAM ; Is it a RAM Disk ? |
BEQ EWOK ; Yep, can write to it |
CMPB #DTYPROM ; Allow writes to ROM Disk too |
BEQ EWOK |
LBRA EDUMMY ; Nope report read only |
* |
EWOK LDY #BUFFER |
CLRB |
EWLOOP1 LDA 0,X+ move 256 bytes to buffer from Flex RAM |
STA 0,Y+ |
DECB |
BNE EWLOOP1 |
* |
LBSR MAPIN |
* |
LDY #BUFFER |
CLRB |
EWLOOP2 LDA 0,Y+ move 256 bytes from buffer to external RAM |
STA 0,U+ |
DECB |
BNE EWLOOP2 |
* |
LBSR MAPOUT |
* |
CLRB |
PULS X,Y,U,PC |
* |
* |
***************************************************** |
* FlexNet drivers * |
* --------------- * |
* Drivers to support a remote connection via the * |
* serial port using the FlexNet protocol as defined * |
* in FLEXNet_421B * |
***************************************************** |
* |
* |
* read sector from remote drive |
* |
NREAD PSHS B |
PSHS A |
CLR CHKSUM clear checksum |
CLR CHKSUM+1 |
* |
LDA #'s Send read sector command |
JSR SCHAR |
BCC NRD_DNR if timeout, then flag drive not ready |
* |
LDA DRVNUM send drive |
JSR SCHAR |
BCC NRD_DNR |
* |
PULS A send track |
JSR SCHAR |
BCC NRD_DNR |
* |
PULS A send sector |
JSR SCHAR |
BCC NRD_DNR |
* |
* transfer 256 bytes |
CLRB |
NREAD1 JSR RCHAR read byte |
BCC NRD_DNR if timeout, then flag drive not ready |
STA 0,X+ |
ADDA CHKSUM+1 update checksum |
STA CHKSUM+1 |
BCC NREAD2 |
INC CHKSUM |
NREAD2 DECB |
BNE NREAD1 |
* |
* compare checksums |
JSR RCHAR get checksum msb |
BCC NRD_DNR |
PSHS A |
JSR RCHAR get checksum lsb |
BCC NRD_DNR |
TFR A,B |
PULS A |
CMPD CHKSUM compare checksums |
BNE NRD_ERR if checksum error, then flag crc read error |
* |
LDA #ACK no checksum error, send ACK char |
JSR SCHAR |
BCC NRD_DNR |
CLRB all OK, flag no error |
BRA NRD_END |
* |
NRD_DNR LDB #16 flag drive not ready |
BRA NRD_END |
* |
NRD_ERR LDA #NAK send NAK |
JSR SCHAR |
BCC NRD_DNR |
LDB #09 flag crc read error |
* |
NRD_END STB CHKSUM used by VERIFY |
TSTB |
RTS |
* |
* |
* write sector to remote drive |
* |
NWRITE PSHS B |
PSHS A |
CLR CHKSUM clear checksum |
CLR CHKSUM+1 |
* |
LDA #'r Send write sector command |
JSR SCHAR |
BCC NRD_DNR if timeout, then flag drive not ready |
* |
LDA DRVNUM send drive |
JSR SCHAR |
BCC NRD_DNR |
* |
PULS A send track |
JSR SCHAR |
BCC NRD_DNR |
* |
PULS A send sector |
JSR SCHAR |
BCC NRD_DNR |
* |
* transfer 256 bytes |
CLRB |
NWRITE1 LDA 0,X+ |
JSR SCHAR write byte |
BCC NRD_DNR if timeout, then flag drive not ready |
ADDA CHKSUM+1 update checksum |
STA CHKSUM+1 |
BCC NWRITE2 |
INC CHKSUM |
NWRITE2 DECB |
BNE NWRITE1 |
* |
* compare checksums |
LDA CHKSUM |
JSR SCHAR send checksum msb |
BCC NRD_DNR |
LDA CHKSUM+1 |
JSR SCHAR send checksum lsb |
BCC NRD_DNR |
* |
JSR RCHAR get checksum response |
BCC NRD_DNR |
CMPA #ACK |
BNE NWR_ERR if checksum error, then flag write error |
* |
CLRB all OK, flag no error |
BRA NWR_END |
* |
NWR_ERR LDB #10 flag write error |
* |
NWR_END STB CHKSUM used by VERIFY |
TSTB |
RTS |
* |
* |
* verify last sector written to remote drive |
* |
NVERIFY LDB CHKSUM test last checksum |
TSTB |
RTS |
* |
* |
* quck check and check drive ready |
* |
NCHECK LDA #'Q quick check command |
JSR SCHAR |
BCC NCK_ERR if timeout, then flag drive not ready |
|
JSR RCHAR get response from host |
BCC NCK_ERR |
CMPA #ACK |
BNE NCK_ERR if NAK, then flag drive not ready |
|
CLRB all OK, flag drive ready |
BRA NCK_END |
* |
NCK_ERR LDB #16 report drive not ready |
ORCC #$01 check needs carry set as well |
* |
NCK_END TSTB |
RTS |
* |
* |
* recieve char from remote drive. |
* timeout if no response for approx 1s. |
* Entry: no parameters |
* Exit: (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout. |
* |
RCHAR PSHS X,Y |
* |
LDX #1000 1000x inner loop |
RCHAR1 LDY #DELCON delay constant for inner loop (approx 1ms). |
RCHAR2 LDA ACIAC1 test for recieved char |
ASRA |
BCS RCHAR3 get character |
LEAY -1,Y else, continue to count delay |
BNE RCHAR2 |
LEAX -1,X |
BNE RCHAR1 |
PULS X,Y,PC return with error if timed out |
* |
RCHAR3 LDA ACIAD1 return data (carry bit still set) |
PULS X,Y,PC |
* |
* |
* transmit char to remote drive. |
* timeout if no response for approx 1s. (allows for use of hardware flow control) |
* Entry: (A) = char to transmit |
* Exit: (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout. |
* |
SCHAR PSHS X,Y |
PSHS A |
* |
LDX #1000 1000x inner loop |
SCHAR1 LDY #DELCON delay constant for inner loop (approx 1ms). |
SCHAR2 LDA ACIAC1 test for space in transmit FIFO |
ASRA |
ASRA |
BCS SCHAR3 send character |
LEAY -1,Y else, continue to count delay |
BNE SCHAR2 |
LEAX -1,X |
BNE SCHAR1 |
PULS A |
PULS X,Y,PC return with error if timed out |
* |
SCHAR3 PULS A |
STA ACIAD1 send data (carry bit still set) |
PULS X,Y,PC |
* |
** 'UF' Format RAMdisc to FLEX standard. |
* |
DISFOS FCB $0A,$0D |
FCC 'Formating RAMdisk... ' |
FCB 4 |
MESS6 FCB $0A,$0D,4 |
FCC 'Ramdisk not allocated! ' |
FCB 4 |
* |
UFSUB LDX #DISFOS |
JSR PDATA1 |
LDX #DTYPTAB search for allocated ramdisk |
CLRB |
FMT9 LDA B,X |
CMPA #DTYPRAM driver type 1 is ramdisk |
BEQ FFOUND |
INCB |
CMPB #4 end of table? then not allocated. |
BNE FMT9 |
LDX #MESS6 |
JSR PDATA1 |
RTS |
* |
FFOUND STB DRVNUM |
LDX #DRVNUM-3 |
JSR DRVSEL |
* |
* set up free chain |
* |
LDX #BUFFER clear out buffer |
CLRA |
CLRB |
DFL1 STA 0,X+ |
DECB |
BNE DFL1 |
* |
CLR TRACK |
LDA #1 |
STA SECTOR |
DFL2 LDX #BUFFER |
LDA TRACK |
STA 0,X |
LDA SECTOR |
INCA |
CMPA #RMAXSEC+1 last sector on track? |
BNE DFL3 |
INC 0,X |
LDA #1 |
DFL3 STA 1,X |
LDA TRACK |
LDB SECTOR |
JSR WRITSC |
INC SECTOR |
LDA SECTOR |
CMPA #RMAXSEC+1 |
BNE DFL2 |
LDA #1 |
STA SECTOR |
INC TRACK |
LDA TRACK |
CMPA #RMAXTRK |
BNE DFL2 |
* break free chain at last track/sector |
LDX #BUFFER |
LDA #RMAXTRK-1 |
LDB #RMAXSEC |
JSR READSC |
LDX #BUFFER |
CLR 0,X |
CLR 1,X |
LDA #RMAXTRK-1 |
LDB #RMAXSEC |
JSR WRITSC |
* set up sector structure, SIR, directory etc |
LDX #BUFFER |
CLRA |
LDB #RMAXSEC |
JSR READSC |
LDX #BUFFER |
CLR 0,X break end of directory chain |
CLR 1,X |
CLRA |
LDB #RMAXSEC |
JSR WRITSC |
* |
LDX #BUFFER |
CLRA |
LDB #3 set up SIR |
JSR READSC |
LDX #BUFFER |
CLR 0,X break forward link |
CLR 1,X |
LDD #$5241 set volume name (RAMDISK ) |
STD 16,X |
LDD #$4D44 |
STD 18,X |
LDD #$4953 |
STD 20,X |
LDD #$4B20 |
STD 22,X |
LDD #1 volume number |
STD 27,X |
LDD #$0101 first trk/sec 01-01 |
STD 29,X |
LDA #RMAXTRK-1 |
LDB #RMAXSEC |
STD 31,X |
STD 38,X |
LDD #RTOTSEC total DATA sectors (2912-14) |
STD 33,X |
* |
LDA #01 month set default creation date (SYS09's birthday!) |
STA 35,X |
LDA #07 day |
STA 36,X |
LDA #07 year |
STA 37,X |
* |
RF3 CLRA |
LDB #3 |
JSR WRITSC |
* |
LDX #BUFFER |
CLRA |
LDB #1 |
JSR READSC |
LDX #BUFFER |
LDA #$AA set the init flag |
STA 0,X |
LDA #$55 |
STA 1,X |
CLRA |
LDB #1 |
JMP WRITSC |
* |
******************************** |
* System specific Boot * |
* command goes here. * |
******************************** |
* |
* Boot FLEX from the FPGA's internal pre-loaded scratch RAM |
* |
UBMESS FCB $08, $08 |
FCC 'Booting internal FLEX....' |
FCB $0D,$0A,$04 |
* |
UBSUB LDX #UBMESS |
JSR PDATA1 |
* |
LDX #$D3E5 |
LDY #CONTAB Overlay console driver table |
UB1 LDD 0,Y++ |
STD 0,X++ |
CMPX #$D3FD |
BNE UB1 |
* |
LDX #$DE00 Overlay disk driver table |
LDY #DISTAB |
UB2 LDD 0,Y++ |
STD 0,X++ |
CMPX #$DE1E |
BNE UB2 |
* |
UBEND JMP $CD00 |
* |
* FLEX console jump table. |
CONTAB FDB INPNE INPUT NO ECHO |
FDB DUMMY INTERRUPT HANDLER |
FDB MONRAM+$02 SWI VECTOR |
FDB MONRAM+$08 IRQ VECTOR |
FDB DUMMY TIMER OFF |
FDB DUMMY TIMER ON |
FDB DUMMY TIMER INITIALIZATION |
FDB CONTRL MONITOR |
FDB DUMMY TERMINAL INITIALIZATION |
FDB STATUS INPUT CHECK |
FDB OUTP TERMINAL OUTPUT |
FDB INPE TERMINAL INPUT WITH ECHO |
* |
* FLEX disk jump table. |
DISTAB JMP READSC |
JMP WRITSC |
JMP BUSY |
JMP RESTR1 |
JMP DRVSEL |
JMP CHKRDY |
JMP CHKQIK |
JMP DINIT |
JMP DWARM |
JMP SEEKTS |
* |
* Monitor jumps |
* |
PDATA1 JMP [PDATAV] |
OUTP JMP [OUTCHV] |
INPE JMP [INCHEV] |
INPNE JMP [INCHV] |
STATUS JMP [INCHKV] |
CONTRL JMP [MONITV] |
DUMMY RTS |
* |
** 'UL' LOAD ROM DISK VIA SERIAL PORT |
* |
ULMES FCC 'Serial ROM Disk upload ...' |
FCB $0D,$0A,$04 |
ULMES1 FCC 'ROM Disk Loaded' |
FCB $0D,$0A,$04 |
* |
ULSUB LDX #ULMES |
JSR PDATA1 |
* |
LDA #$00 |
STA DRVNUM |
CLRA TRACK 0 |
LDB #$01 SECTOR 1 |
ULLOOP0 STA TRACK |
STB SECTOR` |
LBSR MAPIN |
* |
CLRB xfer 256 bytes at a time. |
ULLOOP1 JSR LRBYTE transfer should be hex bytes |
STA ,U+ |
DECB |
BNE ULLOOP1 |
* |
LBSR MAPOUT |
* |
LDA TRACK |
LDB SECTOR |
INCB |
CMPB #EMAXSEC+1 |
BNE ULLOOP0 |
LDB #1 |
INCA |
CMPA #EMAXTRK |
BNE ULLOOP0 |
* |
ULEXIT LDX #ULMES1 |
JMP PDATA1 |
* |
* Read a byte from the serial port |
* |
LRBYTE PSHS B |
BSR LRHEX Get hex digit. |
ASLA |
ASLA Shift to msb. |
ASLA |
ASLA |
TFR A,B Save in B. |
BSR LRHEX Get next digit. |
PSHS B |
ADDA 0,S+ Add together bytes. |
PULS B,PC |
* |
LRHEX JSR INTER |
BVS LRHEX |
SUBA #$30 Remove ascii bias. |
BMI LRHEX |
CMPA #$09 Number? |
BLE LRHEX1 Yes. |
CMPA #$11 Keep testing. |
BMI LRHEX |
CMPA #$16 |
BGT LRHEX |
SUBA #$07 |
LRHEX1 RTS |
* |
* ACIA INPUT TEST |
* |
INTEST LDA ACIAC1 |
BITA #$01 |
RTS |
* |
* RESET ACIA |
* |
ACIRST LDA #$03 master reset |
STA ACIAC1 |
LDA #$11 |
STA ACIAC1 |
RTS |
* |
* ACIA INPUT |
* |
INTER LDA #16 |
STA DELCNT+0 |
CLR DELCNT+1 |
CLR DELCNT+2 |
INTER0 LDA ACIAC1 |
BITA #$01 |
BNE INTER1 |
BITA #$78 |
BEQ INTER2 |
BSR ACIRST |
BRA INTER |
* |
INTER1 LDA ACIAD1 |
ANDCC #VFLAG |
RTS |
* |
INTER2 DEC DELCNT+2 |
BNE INTER0 |
DEC DELCNT+1 |
BNE INTER0 |
DEC DELCNT+0 |
BNE INTER0 |
CLRA |
ORCC #VFLAG |
RTS |
* |
* ACIA OUTPUT |
* |
OUTTER PSHS A |
* |
OUTTE1 LDA ACIAC1 |
BITA #$02 |
BNE OUTTE2 |
BITA #$78 |
BEQ OUTTE1 |
BSR ACIRST |
BRA OUTTE1 |
* |
OUTTE2 PULS A |
STA ACIAD1 |
RTS |
* |
** 'UX' Xmodem ROM Disk upload |
* |
UXMES FCB $0D,$0A |
FCC 'Xmodem ROM Disk Upload' |
FCB 4 |
UXMES1 FCB $0D,$0A |
FCC 'Upload Complete' |
FCB 4 |
UXMES2 FCB $0D,$0A |
FCC 'Upload Error' |
FCB 4 |
* |
UXSUB LDX #UXMES |
LBSR PDATA1 |
* |
LDA #1 |
STA BLKNUM |
LDX #XSTSTR |
STX XSTATE |
* |
LDA #$00 |
STA DRVNUM |
CLRA TRACK 0 |
LDB #$01 SECTOR 1 |
UXLOOP0 STA TRACK |
STB SECTOR |
LBSR MAPIN |
* |
CLRB xfer 256 bytes at a time. |
UXLOOP1 LBSR XBYTE transfer should be hex bytes |
BCS UXERR |
STA ,U+ |
DECB |
BNE UXLOOP1 |
* |
LBSR MAPOUT |
* |
LDA TRACK |
LDB SECTOR |
INCB |
CMPB #EMAXSEC+1 |
BNE UXLOOP0 |
LDB #1 |
INCA |
CMPA #EMAXTRK |
BNE UXLOOP0 |
* |
UXEXIT LDX #UXMES1 |
JMP PDATA1 |
* |
UXERR LBSR MAPOUT |
LDX #UXMES2 |
LBRA PDATA1 |
* |
* Get a Byte using XModem protocol |
* Carry clear => no errors |
* Carry set => errors |
* |
XBYTE PSHS X |
LDX XSTATE |
* |
XBYTE0 LBSR INTER |
BVC XBYTE1 |
LDA #NAK |
LBSR OUTTER |
LDX #XSTSTR |
BRA XBYTE0 |
* |
XBYTE1 JSR ,X |
BNE XBYTE0 |
STX XSTATE |
PULS X,PC |
* |
* START - LOOK FOR SOH (START OF HEADER) = $01 |
* |
XSTSTR CMPA #SOH |
BNE XSTSTR1 |
LDX #XSTBLK |
ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit) |
RTS |
* |
XSTSTR1 CMPA #EOT |
BNE XSTSTR2 |
LDA #ACK |
LBSR OUTTER |
ORCC #CFLAG+ZFLAG Set (c)=1 abort & exit |
RTS |
* |
XSTSTR2 CMPA #CAN |
BNE XSTSTR3 |
ORCC #CFLAG+ZFLAG Set (c)=1 abort & exit |
RTS |
* |
XSTSTR3 ANDCC #$FF-CFLAG-ZFLAG |
RTS |
* |
* Got SOH |
* Now get block number |
* |
XSTBLK CMPA BLKNUM |
BNE XSTBLKE |
LDX #XSTCOM |
ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) |
RTS |
* |
* Error in block number |
* |
XSTBLKE LDA #NAK |
LBSR OUTTER |
LDX #XSTSTR |
ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) |
RTS |
* |
* Get complement of block number |
* |
XSTCOM COMA |
CMPA BLKNUM |
BNE XSTBLKE |
CLR CHKSUM |
LDA #128 |
STA BYTCNT |
LDX #XSTDAT |
ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) |
RTS |
* |
* Get data bytes |
* |
XSTDAT PSHS A |
ADDA CHKSUM |
STA CHKSUM |
PULS A |
DEC BYTCNT |
BNE XSTDAT1 |
LDX #XSTCHK |
XSTDAT1 ANDCC #$FF-CFLAG No abort |
ORCC #ZFLAG Valid data (exit) |
RTS |
* |
* Byte count reached zero |
* Check checksum byte |
* |
XSTCHK CMPA CHKSUM |
BNE XSTCHK1 retry if wrong checksum |
* |
* Checksum OK ... |
* increment block number |
* and send ACK |
* |
INC BLKNUM |
LDA #ACK |
BRA XSTCHK2 |
* |
* Checksum Error detected ... |
* Reset Sector counter in ACCB to last 128 byte boundary |
* and send NAK |
* |
XSTCHK1 PSHS B |
TFR U,D |
DECB |
ANDB #128 |
TFR D,U |
PULS B |
LDA #NAK |
XSTCHK2 LBSR OUTTER |
LDX #XSTSTR |
ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit) |
RTS |
* |
** 'UP' Load ROMdisk via config PROM. |
* |
UPMES FCB $08,$08 |
FCC 'Load ROM disk from config PROM.' |
FCB 4 |
UPMES1 FCC 'Found SYNC, loading data...' |
FCB $0A,$0D,4 |
UPMES2 FCC 'ROM Disk Loaded.' |
FCB $0A,$0D,4 |
UPMES3 FCC 'ROM Disk Not Found.' |
FCB $0A,$0D,4 |
* |
UPSUB LDX #UPMES |
JSR PDATA1 |
* |
BSR UPRESET |
LDY #$0020 Set up count for 2 MBit |
LDX #$0000 |
UPSUB1 BSR UPBIT Shift in bit |
BSR UPSYNC Test for Sync pattern` |
BEQ UPSUB4 Skip if found |
LEAX -1,X Count Down inner loop |
CMPX #$0000 |
BNE UPSUB1 Branch if inner loop not complete |
LEAY -1,X Count down outer loop |
CMPY #$0000 |
BNE UPSUB1 Branch if outer loop not complete |
* |
LDX #UPMES3 2MBits scanned, no synch, report error |
JMP PDATA1 |
* |
UPSUB4 LDX #UPMES1 Sync found, now load disk |
JSR PDATA1 |
* |
CLRA |
STA DRVNUM select Drive 0 |
LDB #$01 |
UPSUB2 STA TRACK track 0 |
STB SECTOR sector 1 |
* |
LBSR MAPIN map in buffer |
CLRB 256 byte sector |
UPSUB3 BSR UPBYTE read byte from prom |
STA ,U+ Store in buffer |
DECB |
BNE UPSUB3 Loop until sector read` |
LBSR MAPOUT map out buffer |
* |
LDA TRACK Advance sector |
LDB SECTOR |
INCB |
CMPB #EMAXSEC+1 Wrap on max sector count |
BNE UPSUB2 |
LDB #1 |
INCA Advance track |
CMPA #EMAXTRK |
BNE UPSUB2 |
* |
UPEXIT LDX #UPMES2 Load complete, report message |
JMP PDATA1 |
* |
* Reset Serial PROM |
* |
UPRESET LDA #PRSTHI Strobe the reset line |
STA PROMREG |
LDA #PRSTLO |
STA PROMREG |
LDX #$0000 Delay a while` |
UPRST1 LEAX -1,X |
CMPX #$0000 |
BNE UPRST1 |
STX SYNCREG+0 Clear Sync Shift Register |
STX SYNCREG+2 |
RTS |
* |
* Input 1 Bit From PROM |
* |
UPBIT LDA #PCLKHI |
STA PROMREG |
LDA #PCLKLO |
STA PROMREG |
LDA PROMREG |
LSRA |
ASL SYNCREG+3 |
RTS |
* |
* Test for 32 bit Sync Word |
* |
UPSYNC ROL SYNCREG+2 |
ROL SYNCREG+1 |
ROL SYNCREG+0 |
LDD #SYNCLO |
CMPD SYNCREG+2 |
BNE UPSYNCX |
LDD #SYNCHI |
CMPD SYNCREG+0 |
UPSYNCX RTS |
* |
* Input 1 Byte From PROM |
* |
UPBYTE PSHS B |
LDB #8 |
UPBYTE1 BSR UPBIT |
DECB |
BNE UPBYTE1 |
LDA SYNCREG+3 |
PULS B,PC |
* |
***** NEXTCMD ***** |
* |
NEXTEXT LBSR INPE GET ONE CHAR. FROM TERMINAL |
ANDA #$7F STRIP PARITY FROM CHAR. |
TFR A,B |
LDA #$20 |
LBSR OUTP PRNT SPACE |
CMPB #$60 |
BLE NXTEX0 |
SUBB #$20 |
* |
***** DO TABLE LOOKUP ***** |
* FOR COMMAND FUNCTIONS |
* |
NXTEX0 LDX #EXTTAB POINT TO JUMP TABLE |
NXTEX1 CMPB ,X+ DOES COMMAND MATCH TABLE ENTRY ? |
BEQ JMPEXT BRANCH IF MATCH FOUND |
LEAX 2,X POINT TO NEXT ENTRY IN TABLE |
CMPX #EXTEND REACHED END OF TABLE YET ? |
BNE NXTEX1 IF NOT END, CHECK NEXT ENTRY |
LDX #MSGWHAT POINT TO MSG "WHAT?" |
LBRA PDATA1 PRINT MSG AND RETURN |
JMPEXT JMP [,X] JUMP TO COMMAND ROUTINE |
* |
* EXTENDED COMMAND JUMP TABLE |
* |
EXTTAB EQU * |
FCC 'B' BOOT FLEX |
FDB UBSUB |
FCC 'L' LOAD ROM DISK OVER SERIAL PORT |
FDB ULSUB |
FCC 'F' FORMAT RAM DISK |
FDB UFSUB |
FCC 'P' LOAD ROM DISK FROM PROM |
FDB UPSUB |
FCC 'X' XMODEM ROM DISK UPLOAD |
FDB UXSUB |
* |
EXTEND EQU * |
* |
MSGWHAT FCC "WHAT ?" |
FCB $0A,$0D,$04 |
END |
/f9-monex.asm
2,9 → 2,11
** FLEX 9 DISK DRIVERS |
* |
* FOR SYS09BUG ON THE DIGILENT SPARTAN 3 STARTER BOARD |
* AND THE TERASIC CYCLONE 2 DE1 BOARD |
* WITH I/O MAPPED AT $XE000 |
* AND ROM MAPPED AT $XF000 |
* THE DIGILENT SPARTAN 3 STARTER BOARD HAS 1MBYTE OF SRAM |
* THE TERASIC CYCLONE 2 DE1 BOARD HAS 512KB OF SRAM |
* THE FIRST 64K IS USED BY FLEX, |
* THE SECOND 128K IS USED AS A ROM DISK |
* THE REMAINING RAM IS USED FOR A RAM DISK |
43,7 → 45,8
ETOTSEC EQU EMAXTRK*EMAXSEC-EMAXSEC |
* |
RMAXSEC EQU 14 RAM DISK |
RMAXTRK EQU 192 12 * 16 * 14 * 256 = 688,128 Bytes |
* RMAXTRK EQU 192 12 * 16 * 256 = 688,128 Bytes (Spartan 3 starter with 1MB) |
RMAXTRK EQU 64 4 * 16 * 14 * 256 = 229,376 Bytes (Cyclone 2 DE1 with 512KB) |
RTOTSEC EQU RMAXTRK*RMAXSEC-RMAXSEC |
* |
* DRIVE TYPES |
/flex9ram.lst
0,0 → 1,4009
Assembler release DWC_2.0 version 2.11 |
May 6, 2004 (c) Motorola (free ware) |
0001 NAM FLEX SOURCE |
0000 INCLUDE "f9-moneq.txt" |
|
|
f9-moneq.txt page 2 |
0002 * |
0003 *************************************************** |
0004 * MEMORY MAP EQUATES * |
0005 *************************************************** |
0006 E000 MONIO EQU $E000 I/O SPACE |
0007 DFC0 MONRAM EQU $DFC0 STACK SPACE |
0008 F800 MONROM EQU $F800 START OF ROM |
0009 F000 MONEXT EQU $F000 EXTENDED COMMANDS |
0010 *MONEXT EQU $1000 EXTENDED COMMANDS |
0011 * |
0012 *************************************************** |
0013 * SYS09BUG VARIABLE SPACE |
0014 *************************************************** |
0015 * |
0016 DFC0 STACK EQU MONRAM+0 TOP OF INTERNAL STACK / USER VECTOR |
0017 DFC2 SWI3 EQU MONRAM+2 SOFTWARE INTERRUPT VECTOR #3 |
0018 DFC4 SWI2 EQU MONRAM+4 SOFTWARE INTERRUPT VECTOR #2 |
0019 DFC6 FIRQ EQU MONRAM+6 FAST INTERRUPT VECTOR |
0020 DFC8 IRQ EQU MONRAM+8 INTERRUPT VECTOR |
0021 DFCA SWI EQU MONRAM+10 SOFTWARE INTERRUPT VECTOR |
0022 DFCC SVCVO EQU MONRAM+12 SUPERVISOR CALL VECTOR ORGIN |
0023 DFCE SVCVL EQU MONRAM+14 SUPERVISOR CALL VECTOR LIMIT |
0024 DFD0 LRARAM EQU MONRAM+16 LRA ADDRESSES |
0025 DFE0 CPORT EQU MONRAM+32 RE-VECTORABLE CONTROL PORT |
0026 DFE2 ECHO EQU MONRAM+34 ECHO FLAG |
0027 DFE3 BPTBL EQU MONRAM+35 BREAKPOINT TABLE BASE ADDR |
0028 ************************************************** |
0029 * VDU BYTES * |
0030 ************************************************** |
0031 * |
0032 **** ALWAYS KEEP COLADX AND ROWADX TOGETHER ****** |
0033 DFFB COLADX EQU MONRAM+59 CURSOR COLUMN |
0034 DFFC ROWADX EQU MONRAM+60 CURSOR ROW |
0035 ************************************************** |
0036 * |
0037 DFFD NEWROW EQU MONRAM+61 NEW ROW TEMP FOR ESCAPE |
0038 DFFE ESCFLG EQU MONRAM+62 ESCAPE SEQUENCE ACTIVE |
0039 * |
0040 *************************************************** |
0041 * SERIAL PORT * |
0042 *************************************************** |
0043 * |
0044 E000 ACIAS EQU MONIO+$00 CONTROL PORT |
0045 * |
0046 *************************************************** |
0047 * PS/2 KEYBOARD PORT * |
0048 *************************************************** |
0049 * |
0050 E020 PS2KBD EQU MONIO+$20 PS/2 KEYBOARD PORT |
0051 * |
0052 *************************************************** |
0053 * ADM3A DISPLAY DRIVER VARIABLES * |
0054 *************************************************** |
0055 * |
0056 ** VIDEO DISPLAY DEFINITIONS |
0057 * |
0058 E030 VDU EQU MONIO+$30 |
0059 0000 VDUCHR EQU 0 CHARACTER REGISTER |
0060 0001 VDUATT EQU 1 ATTRIBUTE REGISTER |
0061 0002 VDUCOL EQU 2 CURSOR COLUMN |
0062 0003 VDUROW EQU 3 CURSOR ROW |
0063 0004 VDUOFF EQU 4 ROW OFFSET |
0064 * |
0065 0050 LINLEN EQU 80 LENGTH OF A LINE |
0066 0019 NUMLIN EQU 25 NUMBER OF LINES |
0067 * |
0068 *************************************************** |
0069 * Serial PROM register |
0070 *************************************************** |
0071 * |
0072 ** CONFIGURATION PROM DEFINITIONS |
0073 * |
0074 E0C0 PROMREG EQU MONIO+$C0 |
0075 0001 PCLKHI EQU $01 Toggle PROM Clock High |
0076 0000 PCLKLO EQU $00 Toggle PROM Clock Low |
0077 0002 PRSTHI EQU $02 Toggle PROM Reset High |
0078 0000 PRSTLO EQU $00 Toggle PROM Reset Low |
0079 AA55 SYNCHI EQU $AA55 Synch Pattern High Word |
0080 FF00 SYNCLO EQU $FF00 Synch Pattern Low Word |
0081 * |
0082 * |
0083 *************************************************** |
0084 * Dynamic Address Translation Registers |
0085 *************************************************** |
0086 * |
0087 ** DAT Table |
0088 * |
0089 FFF0 IC11 EQU $FFF0 DAT RAM CHIP |
0090 * |
0091 *************************************************** |
0092 * START OF ROM * |
0093 *************************************************** |
0094 * |
0095 F800 MONITV EQU MONROM+0 FDB MONITOR |
0096 F802 NXTCMV EQU MONROM+2 FDB NEXTCMD |
0097 F804 INCHV EQU MONROM+4 FDB INCH |
0098 F806 INCHEV EQU MONROM+6 FDB INCHE |
0099 F808 INCHKV EQU MONROM+8 FDB INCHEK |
0100 F80A OUTCHV EQU MONROM+10 FDB OUTCH |
0101 F80C PDATAV EQU MONROM+12 FDB PDATA |
0102 F80E PCRLFV EQU MONROM+14 FDB PCRLF |
0103 F810 PSTRGV EQU MONROM+16 FDB PSTRNG |
0104 F812 LRAV EQU MONROM+18 FDB LRA |
0002 END |
0000 INCLUDE "f9-equ.txt" |
0001 0000 Z0000 EQU $0000 |
0002 0005 Z0005 EQU $0005 |
0003 0044 Z0044 EQU $0044 |
0004 00A0 Z00A0 EQU $00A0 |
0005 C07F ZC07F EQU $C07F |
0006 C080 LINBUF EQU $C080 |
0007 C0FF ZC0FF EQU $C0FF |
0003 END |
0000 INCLUDE "f9-spool.txt" |
0001 * |
0002 ** PRINTER SPOOLING |
0003 * |
0004 C700 ORG $C700 |
0005 C700 7E C7 21 PRSPL1 JMP ZC721 |
0006 C703 7E C7 03 PRSPL2 JMP * |
0007 C706 7E C7 47 PRSPL3 JMP ZC747 |
0008 C709 7E C7 85 PRSPL4 JMP ZC785 |
0009 C70C 7E C7 95 PRSPL5 JMP ZC795 |
0010 C70F 7E C7 1F PRSPL6 JMP ZC71F |
0011 * |
0012 ** SPOOLER SCRATCH AREA |
0013 * |
0014 C712 0C 00 00 00 00 C8 ZC712 FCB $0C,$00,$00,$00,$00,$C8,$10 |
10 |
0015 C719 C8 10 ZC719 FCB $C8,$10 |
0016 C71B 00 QCNT FCB $00 |
0017 C71C 00 ZC71C FCB $00 |
0018 C71D 00 ZC71D FCB $00 |
0019 C71E 00 ZC71E FCB $00 |
0020 * |
0021 C71F 3B ZC71F RTI |
0022 C720 12 NOP |
0023 * |
0024 C721 1A 10 ZC721 ORCC #$10 |
0025 C723 BE CC 31 LDX ZCC31 |
0026 C726 10 EF 02 STS 2,X |
0027 C729 7D CC 34 TST ZCC34 |
0028 C72C 26 11 BNE ZC73F |
0029 C72E 8E CC FC LDX #ZCCFC |
0030 C731 7C CC 34 INC ZCC34 |
0031 C734 6D 84 TST ,X |
0032 C736 27 07 BEQ ZC73F |
0033 C738 BF CC 31 ZC738 STX ZCC31 |
0034 C73B 10 EE 02 LDS $02,X |
0035 C73E 3B RTI |
0036 * |
0037 C73F 8E CC F8 ZC73F LDX #ZCCF8 |
0038 C742 7F CC 34 CLR ZCC34 |
0039 C745 20 F1 BRA ZC738 |
0040 * |
0041 C747 1A 10 ZC747 ORCC #$10 |
0042 C749 7D C7 1B TST QCNT |
0043 C74C 27 29 BEQ ZC777 |
0044 C74E BE C7 19 LDX ZC719 |
0045 C751 A6 84 LDA ,X |
0046 C753 34 02 PSHS A |
0047 C755 EC 01 LDD $01,X |
0048 C757 8E CA C0 LDX #ZCAC0 |
0049 C75A ED 88 40 STD $40,X |
0050 C75D 35 02 PULS A |
0051 C75F A7 03 STA $03,X |
0052 C761 6F 84 CLR ,X |
0053 C763 86 01 LDA #$01 |
0054 C765 A7 02 STA $02,X |
0055 C767 6F 88 22 CLR $22,X |
0056 C76A 6F 88 3B CLR $3B,X |
0057 C76D 7D C7 1E ZC76D TST ZC71E |
0058 C770 27 29 BEQ ZC79B |
0059 C772 11 3F SWI3 |
0060 C774 12 NOP |
0061 C775 20 F6 BRA ZC76D |
0062 * |
0063 C777 1C EF ZC777 ANDCC #$EF |
0064 C779 AD 9F D3 ED ZC779 JSR [TOFVEC] |
0065 C77D 7F CC FC CLR ZCCFC |
0066 C780 11 3F SWI3 |
0067 C782 12 NOP |
0068 C783 20 F4 BRA ZC779 |
0069 * |
0070 C785 1A 10 ZC785 ORCC #$10 |
0071 C787 7D CC 30 TST ZCC30 |
0072 C78A 27 05 BEQ ZC791 |
0073 C78C 11 3F SWI3 |
0074 C78E 12 NOP |
0075 C78F 20 F4 BRA ZC785 |
0076 * |
0077 C791 7C CC 30 ZC791 INC ZCC30 |
0078 C794 39 RTS |
0079 * |
0080 C795 7F CC 30 ZC795 CLR ZCC30 |
0081 C798 1C EF ANDCC #$EF |
0082 C79A 39 RTS |
0083 * |
0084 C79B 7D C7 1D ZC79B TST ZC71D |
0085 C79E 26 27 BNE ZC7C7 |
0086 C7A0 8E CA C0 LDX #ZCAC0 |
0087 C7A3 BD D4 06 JSR FMS |
0088 C7A6 26 1F BNE ZC7C7 |
0089 C7A8 7D C7 1C TST ZC71C |
0090 C7AB 27 0F BEQ ZC7BC |
0091 C7AD 7F C7 1C CLR ZC71C |
0092 C7B0 81 0A CMPA #$0A |
0093 C7B2 27 0F BEQ ZC7C3 |
0094 C7B4 34 02 PSHS A |
0095 C7B6 86 0A LDA #$0A |
0096 C7B8 8D 3C BSR ZC7F6 |
0097 C7BA 35 02 PULS A |
0098 C7BC 81 0D ZC7BC CMPA #$0D |
0099 C7BE 26 03 BNE ZC7C3 |
0100 C7C0 B7 C7 1C STA ZC71C |
0101 C7C3 8D 31 ZC7C3 BSR ZC7F6 |
0102 C7C5 20 D4 BRA ZC79B |
0103 * |
0104 C7C7 86 0D ZC7C7 LDA #$0D |
0105 C7C9 8D 2B BSR ZC7F6 |
0106 C7CB 86 0A LDA #$0A |
0107 C7CD 8D 27 BSR ZC7F6 |
0108 C7CF B6 C7 12 LDA ZC712 |
0109 C7D2 8D 22 BSR ZC7F6 |
0110 C7D4 7F C7 1D CLR ZC71D |
0111 C7D7 BE C7 19 LDX ZC719 |
0112 C7DA 6D 03 TST $03,X |
0113 C7DC 27 05 BEQ ZC7E3 |
0114 C7DE 6A 03 DEC $03,X |
0115 C7E0 7E C7 47 JMP ZC747 |
0116 * |
0117 C7E3 30 04 ZC7E3 LEAX $04,X |
0118 C7E5 8C C8 40 CMPX #FCB |
0119 C7E8 26 03 BNE ZC7ED |
0120 C7EA 8E C8 10 LDX #ZC810 |
0121 C7ED BF C7 19 ZC7ED STX ZC719 |
0122 C7F0 7A C7 1B DEC QCNT |
0123 C7F3 7E C7 47 JMP ZC747 |
0124 * |
0125 C7F6 BD CC D8 ZC7F6 JSR PCHK |
0126 C7F9 2B 05 BMI ZC800 |
0127 C7FB 11 3F SWI3 |
0128 C7FD 12 NOP |
0129 C7FE 20 F6 BRA ZC7F6 |
0130 * |
0131 C800 7E CC E4 ZC800 JMP POUT |
0132 C810 ZC810 EQU $C810 |
0133 C838 ZC838 EQU $C838 |
0004 END |
0000 INCLUDE "f9-sfcb.txt" |
0001 * |
0002 ** SYSTEM FILE CONTROL BLOCK |
0003 * |
0004 C840 ORG $C840 |
0005 C840 FF FCB FCB $FF |
0006 C841 00 FCB $00 |
0007 C842 00 FCB $00 |
0008 C843 00 FCB $00 |
0009 C844 53 54 41 52 54 55 ZC844 FCC "STARTUP" |
50 |
0010 C84B 00 FCB $00 |
0011 C84C 54 58 54 FCC "TXT" |
0012 C84F 00 FCB $00 |
0005 END |
0000 INCLUDE "f9-init.txt" |
0001 * |
0002 ** FLEX INITIATION |
0003 * |
0004 CA00 ORG $CA00 |
0005 CA00 20 06 ZCA00 BRA ZCA08 |
0006 CA02 BD CA AC ZCA02 JSR >ZCAAC |
0007 CA05 39 RTS |
0008 CA06 C0 A0 ZCA06 SUBB #$A0 |
0009 CA08 86 39 ZCA08 LDA #$39 |
0010 CA0A B7 D3 FD STA >ZD3FD |
0011 CA0D BE CC 2B LDX >MEMEND |
0012 CA10 30 89 00 A1 LEAX $00A1,X |
0013 CA14 BF CA 06 STX >ZCA06 |
0014 CA17 AD 9F D3 F1 JSR [TINVEC] |
0015 CA1B BE D3 FB LDX >INVEC |
0016 CA1E BF CD 0A STX >INCH+1 |
0017 CA21 BF CD 0D STX >INCH2+1 |
0018 CA24 BE D3 F9 LDX >OUTVEC |
0019 CA27 BF CD 10 STX >OUTCH+1 |
0020 CA2A BF CD 13 STX >OUTCH2+1 |
0021 CA2D BE D3 F7 LDX >STAVEC |
0022 CA30 BF CD 4F STX >ZCD4E+1 |
0023 CA33 8E 00 A0 LDX #Z00A0 |
0024 CA36 C6 B9 LDB #$B9 |
0025 CA38 A6 84 ZCA38 LDA ,X |
0026 CA3A E7 84 STB ,X |
0027 CA3C 12 NOP |
0028 CA3D E1 84 CMPB ,X |
0029 CA3F 26 0B BNE ZCA4C |
0030 CA41 A7 84 STA ,X |
0031 CA43 30 89 04 00 LEAX $0400,X |
0032 CA47 BC CA 06 CMPX >ZCA06 |
0033 CA4A 26 EC BNE ZCA38 |
0034 CA4C 30 89 FF 5F ZCA4C LEAX $FF5F,X |
0035 CA50 BF CC 2B STX >MEMEND |
0036 CA53 8E CD 03 LDX #WARMS |
0037 CA56 BF CC 16 STX >ESCVEC |
0038 CA59 8E CA DC LDX #TTLSTR |
0039 CA5C BD CE 81 JSR >PSTRG1 |
0040 CA5F BD CE B5 JSR >PCRLF1 |
0041 CA62 8D 9E BSR ZCA02 |
0042 CA64 BD CE B5 JSR >PCRLF1 |
0043 CA67 8E C8 40 LDX #FCB |
0044 CA6A 86 01 LDA #$01 |
0045 CA6C A7 84 STA ,X |
0046 CA6E BD D4 06 JSR >FMS |
0047 CA71 27 08 BEQ ZCA7B |
0048 CA73 A6 01 LDA $01,X |
0049 CA75 BD D2 00 JSR >ZD200 |
0050 CA78 7E CD 67 JMP >WARM1 |
0051 |
0052 CA7B 8E C0 80 ZCA7B LDX #LINBUF |
0053 CA7E BF CC 14 ZCA7E STX >LINPTR |
0054 CA81 8E C8 40 LDX #FCB |
0055 CA84 BD D4 06 JSR >FMS |
0056 CA87 27 05 BEQ ZCA8E |
0057 CA89 34 30 PSHS Y,X |
0058 CA8B 7E D2 D7 JMP >ZD2D7 |
0059 |
0060 CA8E BE CC 14 ZCA8E LDX >LINPTR |
0061 CA91 A7 80 STA ,X+ |
0062 CA93 81 0D CMPA #$0D |
0063 CA95 26 E7 BNE ZCA7E |
0064 CA97 8E C8 40 LDX #FCB |
0065 CA9A BD D1 F4 JSR >ZD1F4 |
0066 CA9D 8E C0 80 LDX #LINBUF |
0067 CAA0 BF CC 14 STX >LINPTR |
0068 CAA3 8E CD 67 LDX #WARM1 |
0069 CAA6 BF CC 43 STX >ZCC43 |
0070 CAA9 7E D3 2E JMP >ZD32E |
0071 |
0072 CAAC 8E CA EC ZCAAC LDX #DATSTR |
0073 CAAF BD CE 81 JSR >PSTRG1 |
0074 CAB2 BD CE 2B JSR >INBUF1 |
0075 CAB5 8D 14 BSR ZCACB |
0076 CAB7 25 F3 BCS ZCAAC |
0077 CAB9 B7 CC 0E STA >MONTH |
0078 CABC 8D 0D BSR ZCACB |
0079 CABE 25 EC BCS ZCAAC |
0080 CAC0 B7 CC 0F ZCAC0 STA >DAY |
0081 CAC3 8D 06 BSR ZCACB |
0082 CAC5 25 E5 BCS ZCAAC |
0083 CAC7 B7 CC 10 STA >YEAR |
0084 CACA 39 RTS |
0085 |
0086 CACB BD D1 75 ZCACB JSR >INDEC1 |
0087 CACE 25 0B BCS ZCADB |
0088 CAD0 B6 CC 1C LDA >LODOFF+1 |
0089 CAD3 5D TSTB |
0090 CAD4 27 03 BEQ ZCAD9 |
0091 CAD6 1C FE ANDCC #$FE |
0092 CAD8 39 RTS |
0093 |
0094 CAD9 1A 01 ZCAD9 ORCC #$01 |
0095 CADB 39 ZCADB RTS |
0096 |
0097 CADC 36 38 30 39 20 46 TTLSTR FCC "6809 FLEX V3.01" |
4C 45 58 20 56 33 |
2E 30 31 |
0098 CAEB 04 FCB $04 |
0099 CAEC 44 41 54 45 20 28 DATSTR FCC "DATE (MM,DD,YY)? " |
4D 4D 2C 44 44 2C |
59 59 29 3F 20 |
0100 CAFD 04 FCB $04 |
0006 END |
0000 INCLUDE "f9-var.txt" |
0001 * |
0002 ** TTYSET PARAMETERS |
0003 * |
0004 CC00 ORG $CC00 |
0005 CC00 08 BSPCHR FCB $08 |
0006 CC01 18 DELCHR FCB $18 |
0007 CC02 3A EOLCHR FCB $3A |
0008 CC03 19 DEPCNT FCB 25 |
0009 CC04 00 WIDCNT FCB $00 |
0010 CC05 04 NULCNT FCB $04 |
0011 CC06 40 TABCHR FCB '@ |
0012 CC07 00 BSECHR FCB $00 |
0013 CC08 00 EJTCNT FCB $00 |
0014 CC09 FF PAUSE FCB $FF |
0015 CC0A 1B ESCCHR FCB $1B |
0016 CC0B 00 SYSDRV FCB 0 |
0017 CC0C 01 WRKDRV FCB 1 |
0018 CC0D 00 ZCC0D FCB $00 |
0019 CC0E DATERG EQU * |
0020 CC0E 00 MONTH FCB $00 |
0021 CC0F 00 DAY FCB $00 |
0022 CC10 00 YEAR FCB $00 |
0023 CC11 00 LASTRM FCB $00 |
0024 CC12 00 00 UCTVEC FDB $0000 |
0025 CC14 00 00 LINPTR FDB $0000 |
0026 CC16 00 00 ESCVEC FDB $0000 |
0027 CC18 00 CURCHR FCB $00 |
0028 CC19 00 PRVCHR FCB $00 |
0029 CC1A 00 CURLIN FCB $00 |
0030 CC1B 00 00 LODOFF FDB $0000 |
0031 CC1D 00 TRNFLG FCB $00 |
0032 CC1E 00 00 TRNVEC FDB $0000 |
0033 CC20 00 ERRTYP FCB $00 |
0034 CC21 00 SIOFLG FCB $00 |
0035 CC22 00 OUTSWT FCB $00 |
0036 CC23 00 INPSWT FCB $00 |
0037 CC24 00 00 FOPADR FDB $0000 |
0038 CC26 00 00 FIPADR FDB $0000 |
0039 CC28 00 CMDFLG FCB $00 |
0040 CC29 00 CURCOL FCB $00 |
0041 CC2A 00 FCB $00 |
0042 CC2B BF FF MEMEND FDB $BFFF |
0043 CC2D 00 00 ERRVEC FDB $0000 |
0044 CC2F 01 FIEFLG FCB $01 |
0045 CC30 00 ZCC30 FCB $00 |
0046 CC31 00 00 00 ZCC31 FCB $00,$00,$00 |
0047 CC34 00 00 00 00 00 00 ZCC34 FCB $00,$00,$00,$00,$00,$00,$00 |
00 |
0048 CC3D ZCC3D EQU $CC3D |
0049 CC3F ZCC3F EQU $CC3F |
0050 CC43 ZCC43 EQU $CC43 |
0051 CC45 ZCC45 EQU $CC45 |
0052 CC47 ZCC47 EQU $CC47 |
0053 CC49 ORG $CC49 |
0054 CC49 60 MAPUP FCB $60 MAP LOWER TO UPPERCASE |
0055 CC4A ZCC4A EQU $CC4A |
0056 CC4B ZCC4B EQU $CC4B |
0057 CC4C ZCC4C EQU $CC4C |
0058 CC4D ZCC4D EQU $CC4D |
0007 END |
0000 INCLUDE "f9-data.txt" |
0001 * |
0002 ** STRINGS AND MESSAGES |
0003 * |
0004 CC4E ORG $CC4E |
0005 CC4E 2B 2B 2B PMTSTR FCC "+++" |
0006 CC51 04 FCB $04 |
0007 CC52 3F 3F 3F QRYSTR FCC "???" |
0008 CC55 04 FCB $04 |
0009 CC56 57 48 41 54 3F WOTMSG FCC "WHAT?" |
0010 CC5B 04 FCB $04 |
0011 CC5C 43 41 4E 27 54 20 NTRMSG FCC "CAN'T TRANSFER" |
54 52 41 4E 53 46 |
45 52 |
0012 CC6A 04 FCB $04 |
0013 CC6B 4E 4F 54 20 46 4F NFDMSG FCC "NOT FOUND" |
55 4E 44 |
0014 CC74 04 FCB $04 |
0015 CC75 44 49 53 4B 20 45 DERMSG FCC "DISK ERROR #" |
52 52 4F 52 20 23 |
0016 CC81 04 FCB $04 |
0017 CC82 44 52 49 56 45 53 DNRMSG FCC "DRIVES NOT READY" |
20 4E 4F 54 20 52 |
45 41 44 59 |
0018 CC92 04 FCB $04 |
0019 * |
0020 ** MEMORY RESIDENT COMMANDS |
0021 * |
0022 CC93 47 45 54 CMDTBL FCC "GET" |
0023 CC96 00 FCB $00 |
0024 CC97 D2 0F FDB GETCMD |
0025 CC99 4D 4F 4E FCC "MON" |
0026 CC9C 00 FCB $00 |
0027 CC9D D3 4B FDB ZD34B |
0028 CC9F 00 FCB $00 |
0029 * |
0030 ** DECIMAL CONVERSION TABLE |
0031 * |
0032 CCA0 27 10 DECTBL FDB 10000 |
0033 CCA2 03 E8 FDB 1000 |
0034 CCA4 00 64 FDB 100 |
0035 CCA6 00 0A FDB 10 |
0008 END |
0000 INCLUDE "f9-cli.txt" |
0001 ********************************************* |
0002 * |
0003 * FLEX COMMAND LINE INTERPRETER & SUBROUTINES |
0004 * |
0005 ********************************************* |
0006 CD00 ORG $CD00 |
0007 * |
0008 ** FLEX JUMPS |
0009 * |
0010 CD00 7E CD 57 COLDS JMP >COLD1 |
0011 CD03 7E CD 67 WARMS JMP >WARM1 |
0012 CD06 7E CD B1 RENTER JMP >RENT1 |
0013 CD09 7E CD 09 INCH JMP >INCH |
0014 CD0C 7E CD 0C INCH2 JMP >INCH2 |
0015 CD0F 7E CD 0F OUTCH JMP >OUTCH |
0016 CD12 7E CD 12 OUTCH2 JMP >OUTCH2 |
0017 CD15 7E CE FB GETCHR JMP >GETCH1 |
0018 CD18 7E CF 41 PUTCHR JMP >PUTCH1 |
0019 CD1B 7E CE 2B INBUFF JMP >INBUF1 |
0020 CD1E 7E CE 81 PSTRNG JMP >PSTRG1 |
0021 CD21 7E CF ED CLASS JMP >CLASS1 |
0022 CD24 7E CE B5 PCRLF JMP >PCRLF1 |
0023 CD27 7E D0 0E NXTCH JMP >NXTCH1 |
0024 CD2A 7E CD EA RSTRIO JMP >RSTIO1 |
0025 CD2D 7E D0 36 GETFIL JMP >GETFL1 |
0026 CD30 7E D1 A2 LOAD JMP >LOAD1 |
0027 CD33 7E D0 EB SETEXT JMP >SETEX1 |
0028 CD36 7E D3 49 ADDBX JMP >ADDBX1 |
0029 CD39 7E CF 86 OUTDEC JMP >OUTDC1 |
0030 CD3C 7E CF D4 OUTHEX JMP >OUTHX1 |
0031 CD3F 7E D2 7F RPTERR JMP >RPTER1 |
0032 CD42 7E D1 2F GETHEX JMP >GETHX1 |
0033 CD45 7E CF D0 OUTADR JMP >OUTAD1 |
0034 CD48 7E D1 75 INDEC JMP >INDEC1 |
0035 CD4B 7E D3 29 DOCMND JMP >DOCMD1 |
0036 CD4E 7E CD 4E ZCD4E JMP >ZCD4E |
0037 CD51 7E CE 05 JMP >ZCE05 |
0038 CD54 7E CE 05 JMP >ZCE05 |
0039 * |
0040 ** COLD START ENTRY |
0041 * |
0042 CD57 10 CE C0 7F COLD1 LDS #ZC07F |
0043 CD5B 7F CC 11 ZCD5B CLR >LASTRM |
0044 CD5E BD D4 00 JSR >ZD400 |
0045 CD61 7F CC 28 CLR >CMDFLG |
0046 CD64 BD D3 FD JSR >ZD3FD |
0047 * |
0048 ** WARM START ENTRY |
0049 * |
0050 CD67 10 CE C0 7F WARM1 LDS #ZC07F |
0051 CD6B BD DE 18 JSR >WARMDR |
0052 CD6E 8E CD 03 LDX #WARMS |
0053 CD71 BF CC 16 STX >ESCVEC |
0054 CD74 8E C7 00 LDX #PRSPL1 |
0055 CD77 AF 9F D3 E9 STX [SWIVVC] |
0056 CD7B BE D3 E7 LDX >IHNDVC |
0057 CD7E AF 9F D3 EB STX [IRQVVC] |
0058 CD82 8E CC F8 LDX #ZCCF8 |
0059 CD85 BF CC 31 STX >ZCC31 |
0060 CD88 7F CC 34 CLR >ZCC34 |
0061 CD8B 7F CC 4C CLR >ZCC4C |
0062 CD8E 8D 5A BSR RSTIO1 |
0063 CD90 B6 CC 11 LDA >LASTRM |
0064 CD93 B1 CC 02 CMPA >EOLCHR |
0065 CD96 26 05 BNE ZCD9D |
0066 CD98 7C CC 15 INC >LINPTR+1 |
0067 CD9B 20 14 BRA RENT1 |
0068 |
0069 CD9D 7D CC 28 ZCD9D TST >CMDFLG |
0070 CDA0 10 26 05 97 LBNE ZD33B |
0071 CDA4 BD D4 03 JSR >FMSCLS |
0072 CDA7 26 B2 BNE ZCD5B |
0073 CDA9 8E CC 4E LDX #PMTSTR |
0074 CDAC BD CE 81 JSR >PSTRG1 |
0075 CDAF 8D 7A BSR INBUF1 |
0076 * |
0077 ** MAIN CONTROL LOOP |
0078 * |
0079 CDB1 BD D0 D4 RENT1 JSR >ZD0D4 |
0080 CDB4 81 0D CMPA #$0D |
0081 CDB6 27 E5 BEQ ZCD9D |
0082 CDB8 8E C8 40 ZCDB8 LDX #FCB |
0083 CDBB 7C CC 0D INC >ZCC0D |
0084 CDBE BD D0 36 JSR >GETFL1 |
0085 CDC1 25 16 BCS ZCDD9 |
0086 CDC3 8E CC 93 LDX #CMDTBL |
0087 CDC6 8D 3E BSR ZCE06 |
0088 CDC8 27 09 BEQ ZCDD3 |
0089 CDCA BE CC 12 LDX >UCTVEC |
0090 CDCD 27 07 BEQ ZCDD6 |
0091 CDCF 8D 35 BSR ZCE06 |
0092 CDD1 26 03 BNE ZCDD6 |
0093 CDD3 6E 98 01 ZCDD3 JMP [$01,X] |
0094 |
0095 CDD6 BD D2 2E ZCDD6 JSR >ZD22E |
0096 CDD9 8E CC 56 ZCDD9 LDX #WOTMSG |
0097 CDDC 86 15 LDA #$15 |
0098 CDDE B7 CC 20 ZCDDE STA >ERRTYP |
0099 CDE1 BD CE 81 ZCDE1 JSR >PSTRG1 |
0100 CDE4 7F CC 11 ZCDE4 CLR >LASTRM |
0101 CDE7 7E CD 67 JMP >WARM1 |
0102 * |
0103 ** RESTORE IO VECTORS |
0104 * |
0105 CDEA BE CD 13 RSTIO1 LDX >OUTCH2+1 |
0106 CDED BF CD 10 STX >OUTCH+1 |
0107 CDF0 BE CD 0D LDX >INCH2+1 |
0108 CDF3 BF CD 0A STX >INCH+1 |
0109 CDF6 7F CC 23 CLR >INPSWT |
0110 CDF9 7F CC 22 CLR >OUTSWT |
0111 CDFC 7F CC 21 CLR >SIOFLG |
0112 CDFF 7F CC 26 CLR >FIPADR |
0113 CE02 7F CC 24 CLR >FOPADR |
0114 CE05 39 ZCE05 RTS |
0115 |
0116 CE06 10 8E C8 44 ZCE06 LDY #ZC844 |
0117 CE0A A6 A0 ZCE0A LDA ,Y+ |
0118 CE0C 81 5F CMPA #$5F |
0119 CE0E 23 02 BLS ZCE12 |
0120 CE10 80 20 SUBA #$20 |
0121 CE12 A1 80 ZCE12 CMPA ,X+ |
0122 CE14 26 08 BNE ZCE1E |
0123 CE16 6D 84 TST ,X |
0124 CE18 26 F0 BNE ZCE0A |
0125 CE1A 6D A4 TST ,Y |
0126 CE1C 27 0C BEQ ZCE2A |
0127 CE1E 6D 80 ZCE1E TST ,X+ |
0128 CE20 26 FC BNE ZCE1E |
0129 CE22 30 02 LEAX $02,X |
0130 CE24 6D 84 TST ,X |
0131 CE26 26 DE BNE ZCE06 |
0132 CE28 1C FB ANDCC #$FB |
0133 CE2A 39 ZCE2A RTS |
0134 * |
0135 ** GET USER COMMAND LINE |
0136 * |
0137 CE2B 8E C0 80 INBUF1 LDX #LINBUF |
0138 CE2E BF CC 14 STX >LINPTR |
0139 CE31 BD CE FB ZCE31 JSR >GETCH1 |
0140 CE34 B1 CC 01 CMPA >DELCHR |
0141 CE37 27 1D BEQ ZCE56 |
0142 CE39 B1 CC 00 CMPA >BSPCHR |
0143 CE3C 27 1F BEQ ZCE5D |
0144 CE3E 81 0D CMPA #$0D |
0145 CE40 27 0D BEQ ZCE4F |
0146 CE42 81 0A CMPA #$0A |
0147 CE44 27 32 BEQ ZCE78 |
0148 CE46 81 1F CMPA #$1F |
0149 CE48 23 E7 BLS ZCE31 |
0150 CE4A 8C C0 FF ZCE4A CMPX #ZC0FF |
0151 CE4D 27 E2 BEQ ZCE31 |
0152 CE4F A7 80 ZCE4F STA ,X+ |
0153 CE51 81 0D CMPA #$0D |
0154 CE53 26 DC BNE ZCE31 |
0155 CE55 39 RTS |
0156 |
0157 CE56 8E CC 52 ZCE56 LDX #QRYSTR |
0158 CE59 8D 26 BSR PSTRG1 |
0159 CE5B 20 CE BRA INBUF1 |
0160 |
0161 CE5D 8C C0 80 ZCE5D CMPX #LINBUF |
0162 CE60 27 F4 BEQ ZCE56 |
0163 CE62 30 1F LEAX -$01,X |
0164 CE64 B6 CC 07 LDA >BSECHR |
0165 CE67 81 08 CMPA #$08 |
0166 CE69 26 08 BNE ZCE73 |
0167 CE6B 86 20 LDA #$20 |
0168 CE6D BD CF 66 JSR >ZCF66 |
0169 CE70 B6 CC 07 LDA >BSECHR |
0170 CE73 BD CF 66 ZCE73 JSR >ZCF66 |
0171 CE76 20 B9 BRA ZCE31 |
0172 |
0173 CE78 86 0D ZCE78 LDA #$0D |
0174 CE7A BD CF 41 JSR >PUTCH1 |
0175 CE7D 86 20 LDA #$20 |
0176 CE7F 20 C9 BRA ZCE4A |
0177 |
0178 CE81 8D 32 PSTRG1 BSR PCRLF1 |
0179 CE83 A6 84 ZCE83 LDA ,X |
0180 CE85 81 04 CMPA #$04 |
0181 CE87 27 6F BEQ ZCEF8 |
0182 CE89 BD CF 41 JSR >PUTCH1 |
0183 CE8C 30 01 LEAX $01,X |
0184 CE8E 20 F3 BRA ZCE83 |
0185 |
0186 CE90 BD CD 4E ZCE90 JSR >ZCD4E |
0187 CE93 27 65 BEQ ZCEFA |
0188 CE95 AD 9F D3 E5 JSR [ZD3E5] |
0189 CE99 B1 CC 0A CMPA >ESCCHR |
0190 CE9C 26 5C BNE ZCEFA |
0191 CE9E 7F CC 1A ZCE9E CLR >CURLIN |
0192 CEA1 AD 9F D3 E5 ZCEA1 JSR [ZD3E5] |
0193 CEA5 B1 CC 0A CMPA >ESCCHR |
0194 CEA8 27 50 BEQ ZCEFA |
0195 CEAA 81 03 CMPA #$03 CTRL C |
0196 CEAC 26 F3 BNE ZCEA1 |
0197 CEAE 7F CC 11 CLR >LASTRM |
0198 CEB1 6E 9F CC 16 JMP [ESCVEC] |
0199 * |
0200 ** PRINT CR, LINEFEED |
0201 * |
0202 CEB5 7D CC 21 PCRLF1 TST >SIOFLG |
0203 CEB8 26 27 BNE ZCEE1 |
0204 CEBA 8D D4 BSR ZCE90 |
0205 CEBC B6 CC 03 LDA >DEPCNT |
0206 CEBF 27 20 BEQ ZCEE1 |
0207 CEC1 B1 CC 1A CMPA >CURLIN |
0208 CEC4 22 18 BHI ZCEDE |
0209 CEC6 7F CC 1A CLR >CURLIN |
0210 CEC9 7D CC 09 TST >PAUSE |
0211 CECC 27 02 BEQ ZCED0 |
0212 CECE 8D CE BSR ZCE9E |
0213 CED0 34 04 ZCED0 PSHS B |
0214 CED2 F6 CC 08 LDB >EJTCNT |
0215 CED5 27 05 BEQ ZCEDC |
0216 CED7 8D 08 ZCED7 BSR ZCEE1 |
0217 CED9 5A DECB |
0218 CEDA 26 FB BNE ZCED7 |
0219 CEDC 35 04 ZCEDC PULS B |
0220 CEDE 7C CC 1A ZCEDE INC >CURLIN |
0221 CEE1 86 0D ZCEE1 LDA #$0D |
0222 CEE3 8D 5C BSR PUTCH1 |
0223 CEE5 86 0A LDA #$0A |
0224 CEE7 8D 58 BSR PUTCH1 |
0225 CEE9 34 04 PSHS B |
0226 CEEB F6 CC 05 LDB >NULCNT |
0227 CEEE 27 06 BEQ ZCEF6 |
0228 CEF0 4F ZCEF0 CLRA |
0229 CEF1 8D 4E BSR PUTCH1 |
0230 CEF3 5A DECB |
0231 CEF4 26 FA BNE ZCEF0 |
0232 CEF6 35 04 ZCEF6 PULS B |
0233 CEF8 1C FE ZCEF8 ANDCC #$FE |
0234 CEFA 39 ZCEFA RTS |
0235 * |
0236 ** GET A CHARACTER HONOURING TTYSET |
0237 * |
0238 CEFB 7D CC 23 GETCH1 TST >INPSWT |
0239 CEFE 26 1A BNE ZCF1A |
0240 CF00 7D CC 26 TST >FIPADR |
0241 CF03 27 10 BEQ ZCF15 |
0242 CF05 8D 1A BSR ZCF21 |
0243 CF07 7D CC 2F TST >FIEFLG |
0244 CF0A 27 11 BEQ ZCF1D |
0245 CF0C 7D CC 24 TST >FOPADR |
0246 CF0F 27 0C BEQ ZCF1D |
0247 CF11 8D 53 BSR ZCF66 |
0248 CF13 20 08 BRA ZCF1D |
0249 CF15 BD CD 09 ZCF15 JSR >INCH |
0250 CF18 20 03 BRA ZCF1D |
0251 |
0252 CF1A BD CD 0C ZCF1A JSR >INCH2 |
0253 CF1D 7F CC 1A ZCF1D CLR >CURLIN |
0254 CF20 39 RTS |
0255 |
0256 CF21 BF CC 47 ZCF21 STX >ZCC47 |
0257 CF24 BE CC 26 LDX >FIPADR |
0258 CF27 20 06 BRA ZCF2F |
0259 |
0260 CF29 BF CC 47 ZCF29 STX >ZCC47 |
0261 CF2C BE CC 24 LDX >FOPADR |
0262 CF2F BD D4 06 ZCF2F JSR >FMS |
0263 CF32 26 04 BNE ZCF38 |
0264 CF34 BE CC 47 LDX >ZCC47 |
0265 CF37 39 RTS |
0266 |
0267 CF38 7F CC 24 ZCF38 CLR >FOPADR |
0268 CF3B BD D2 7F JSR >RPTER1 |
0269 CF3E 7E CD 03 JMP >WARMS |
0270 * |
0271 ** OUTPUT CHARACTER HONOURING TTYSET |
0272 * |
0273 CF41 7D CC 21 PUTCH1 TST >SIOFLG |
0274 CF44 26 20 BNE ZCF66 |
0275 CF46 81 1F CMPA #$1F |
0276 CF48 22 05 BHI ZCF4F |
0277 CF4A 7F CC 29 CLR >CURCOL |
0278 CF4D 20 17 BRA ZCF66 |
0279 |
0280 CF4F 7C CC 29 ZCF4F INC >CURCOL |
0281 CF52 34 02 PSHS A |
0282 CF54 B6 CC 04 LDA >WIDCNT |
0283 CF57 27 0B BEQ ZCF64 |
0284 CF59 B1 CC 29 CMPA >CURCOL |
0285 CF5C 24 06 BCC ZCF64 |
0286 CF5E BD CE B5 JSR >PCRLF1 |
0287 CF61 7C CC 29 INC >CURCOL |
0288 CF64 35 02 ZCF64 PULS A |
0289 CF66 34 02 ZCF66 PSHS A |
0290 CF68 7D CC 22 TST >OUTSWT |
0291 CF6B 26 13 BNE ZCF80 |
0292 CF6D 7D CC 24 TST >FOPADR |
0293 CF70 27 04 BEQ ZCF76 |
0294 CF72 8D B5 BSR ZCF29 |
0295 CF74 20 0D BRA ZCF83 |
0296 |
0297 CF76 7D CC 26 ZCF76 TST >FIPADR |
0298 CF79 26 08 BNE ZCF83 |
0299 CF7B BD CD 0F JSR >OUTCH |
0300 CF7E 20 03 BRA ZCF83 |
0301 CF80 BD CD 12 ZCF80 JSR >OUTCH2 |
0302 CF83 35 02 ZCF83 PULS A |
0303 CF85 39 RTS |
0304 |
0305 CF86 7F CC 4A OUTDC1 CLR >ZCC4A |
0306 CF89 F7 CC 1D STB >TRNFLG |
0307 CF8C 86 04 LDA #$04 |
0308 CF8E B7 CC 4D STA >ZCC4D |
0309 CF91 EC 84 LDD ,X |
0310 CF93 8E CC A0 LDX #DECTBL |
0311 CF96 8D 0B ZCF96 BSR ZCFA3 |
0312 CF98 30 02 LEAX $02,X |
0313 CF9A 7A CC 4D DEC >ZCC4D |
0314 CF9D 26 F7 BNE ZCF96 |
0315 CF9F 1F 98 TFR B,A |
0316 CFA1 20 3D BRA OUTHXR |
0317 |
0318 CFA3 7F CC 4B ZCFA3 CLR >ZCC4B |
0319 CFA6 10 A3 84 ZCFA6 CMPD ,X |
0320 CFA9 25 07 BCS ZCFB2 |
0321 CFAB A3 84 SUBD ,X |
0322 CFAD 7C CC 4B INC >ZCC4B |
0323 CFB0 20 F4 BRA ZCFA6 |
0324 |
0325 CFB2 34 02 ZCFB2 PSHS A |
0326 CFB4 B6 CC 4B LDA >ZCC4B |
0327 CFB7 26 10 BNE ZCFC9 |
0328 CFB9 7D CC 4A TST >ZCC4A |
0329 CFBC 26 0B BNE ZCFC9 |
0330 CFBE 7D CC 1D TST >TRNFLG |
0331 CFC1 27 0B BEQ ZCFCE |
0332 CFC3 86 20 LDA #$20 |
0333 CFC5 8D 23 BSR ZCFEA |
0334 CFC7 20 05 BRA ZCFCE |
0335 |
0336 CFC9 7C CC 4A ZCFC9 INC >ZCC4A |
0337 CFCC 8D 12 BSR OUTHXR |
0338 CFCE 35 82 ZCFCE PULS PC,A |
0339 * |
0340 ** DISPLAY HEX ADDRESS |
0341 * |
0342 CFD0 8D 02 OUTAD1 BSR OUTHX1 |
0343 CFD2 30 01 LEAX $01,X |
0344 * |
0345 ** OUPUT HEX BYTE |
0346 * |
0347 CFD4 A6 84 OUTHX1 LDA ,X |
0348 CFD6 8D 04 BSR OUTHXL |
0349 CFD8 A6 84 LDA ,X |
0350 CFDA 20 04 BRA OUTHXR |
0351 |
0352 CFDC 44 OUTHXL LSRA |
0353 CFDD 44 LSRA |
0354 CFDE 44 LSRA |
0355 CFDF 44 LSRA |
0356 CFE0 84 0F OUTHXR ANDA #$0F |
0357 CFE2 8B 30 ADDA #$30 |
0358 CFE4 81 39 CMPA #$39 |
0359 CFE6 23 02 BLS ZCFEA |
0360 CFE8 8B 07 ADDA #$07 |
0361 CFEA 7E CF 41 ZCFEA JMP >PUTCH1 |
0362 * |
0363 ** CLASSIFY CHARACTER ALHA/NUMERIC |
0364 * |
0365 CFED 81 30 CLASS1 CMPA #'0 |
0366 CFEF 25 14 BCS ZD005 |
0367 CFF1 81 39 CMPA #'9 |
0368 CFF3 23 16 BLS ZD00B |
0369 CFF5 81 41 CMPA #'A |
0370 CFF7 25 0C BCS ZD005 |
0371 CFF9 81 5A CMPA #'Z |
0372 CFFB 23 0E BLS ZD00B |
0373 CFFD 81 61 CMPA #'a $61 |
0374 CFFF 25 04 BCS ZD005 |
0375 D001 81 7A CMPA #'z $7A |
0376 D003 23 06 BLS ZD00B |
0377 D005 1A 01 ZD005 ORCC #$01 |
0378 D007 B7 CC 11 STA >LASTRM |
0379 D00A 39 RTS |
0380 D00B 1C FE ZD00B ANDCC #$FE |
0381 D00D 39 RTS |
0382 * |
0383 ** GET NEXT CHARACTER FROM FILE |
0384 * |
0385 D00E 34 10 NXTCH1 PSHS X |
0386 D010 BE CC 14 LDX >LINPTR |
0387 D013 B6 CC 18 LDA >CURCHR |
0388 D016 B7 CC 19 STA >PRVCHR |
0389 D019 A6 80 ZD019 LDA ,X+ |
0390 D01B B7 CC 18 STA >CURCHR |
0391 D01E 81 0D CMPA #$0D |
0392 D020 27 10 BEQ ZD032 |
0393 D022 B1 CC 02 CMPA >EOLCHR |
0394 D025 27 0B BEQ ZD032 |
0395 D027 BF CC 14 STX >LINPTR |
0396 D02A 81 20 CMPA #$20 |
0397 D02C 26 04 BNE ZD032 |
0398 D02E A1 84 CMPA ,X |
0399 D030 27 E7 BEQ ZD019 |
0400 D032 8D B9 ZD032 BSR CLASS1 |
0401 D034 35 90 PULS PC,X |
0402 * |
0403 ** PARSE FILE SPEC. IN LINE BUFFER |
0404 * |
0405 D036 86 15 GETFL1 LDA #$15 |
0406 D038 A7 01 STA $01,X |
0407 D03A 86 FF LDA #$FF |
0408 D03C A7 03 STA $03,X |
0409 D03E 6F 04 CLR $04,X |
0410 D040 6F 0C CLR $0C,X |
0411 D042 BD D0 D4 JSR >ZD0D4 |
0412 D045 86 08 LDA #$08 |
0413 D047 B7 CC 4B STA >ZCC4B |
0414 D04A 8D 34 BSR ZD080 |
0415 D04C 25 2E BCS ZD07C |
0416 D04E 26 0F BNE ZD05F |
0417 D050 8D 2E BSR ZD080 |
0418 D052 25 28 BCS ZD07C |
0419 D054 26 09 BNE ZD05F |
0420 D056 BC CC 3F CMPX >ZCC3F |
0421 D059 27 6C BEQ ZD0C7 |
0422 D05B 8D 23 BSR ZD080 |
0423 D05D 23 68 BLS ZD0C7 |
0424 D05F BE CC 3F ZD05F LDX >ZCC3F |
0425 D062 6D 04 TST $04,X |
0426 D064 27 61 BEQ ZD0C7 |
0427 D066 6D 03 TST $03,X |
0428 D068 2A 0F BPL ZD079 |
0429 D06A 7D CC 0D TST >ZCC0D |
0430 D06D 27 05 BEQ ZD074 |
0431 D06F B6 CC 0B LDA >SYSDRV |
0432 D072 20 03 BRA ZD077 |
0433 |
0434 D074 B6 CC 0C ZD074 LDA >WRKDRV |
0435 D077 A7 03 ZD077 STA $03,X |
0436 D079 7F CC 0D ZD079 CLR >ZCC0D |
0437 D07C BE CC 3F ZD07C LDX >ZCC3F |
0438 D07F 39 RTS |
0439 |
0440 D080 8D 8C ZD080 BSR NXTCH1 |
0441 D082 25 43 BCS ZD0C7 |
0442 D084 81 39 CMPA #$39 |
0443 D086 22 15 BHI ZD09D |
0444 D088 BE CC 3F LDX >ZCC3F |
0445 D08B 6D 03 TST $03,X |
0446 D08D 2A 38 BPL ZD0C7 |
0447 D08F 84 03 ANDA #$03 |
0448 D091 A7 03 STA $03,X |
0449 D093 BD D0 0E JSR >NXTCH1 |
0450 D096 24 2F BCC ZD0C7 |
0451 D098 81 2E ZD098 CMPA #$2E |
0452 D09A 1C FE ANDCC #$FE |
0453 D09C 39 RTS |
0454 |
0455 D09D F6 CC 4B ZD09D LDB >ZCC4B |
0456 D0A0 2B 25 BMI ZD0C7 |
0457 D0A2 34 04 PSHS B |
0458 D0A4 C0 05 SUBB #$05 |
0459 D0A6 F7 CC 4B STB >ZCC4B |
0460 D0A9 35 04 PULS B |
0461 D0AB B1 CC 49 ZD0AB CMPA >MAPUP |
0462 D0AE 25 02 BCS ZD0B2 |
0463 D0B0 80 20 SUBA #$20 |
0464 D0B2 A7 04 ZD0B2 STA $04,X |
0465 D0B4 30 01 LEAX $01,X |
0466 D0B6 5A DECB |
0467 D0B7 BD D0 0E JSR >NXTCH1 |
0468 D0BA 24 08 BCC ZD0C4 |
0469 D0BC 81 2D CMPA #$2D |
0470 D0BE 27 04 BEQ ZD0C4 |
0471 D0C0 81 5F CMPA #$5F |
0472 D0C2 26 06 BNE ZD0CA |
0473 D0C4 5D ZD0C4 TSTB |
0474 D0C5 26 E4 BNE ZD0AB |
0475 D0C7 1A 01 ZD0C7 ORCC #$01 |
0476 D0C9 39 RTS |
0477 |
0478 D0CA 5D ZD0CA TSTB |
0479 D0CB 27 CB BEQ ZD098 |
0480 D0CD 6F 04 CLR $04,X |
0481 D0CF 30 01 LEAX $01,X |
0482 D0D1 5A DECB |
0483 D0D2 20 F6 BRA ZD0CA |
0484 |
0485 D0D4 BF CC 3F ZD0D4 STX >ZCC3F |
0486 D0D7 BE CC 14 LDX >LINPTR |
0487 D0DA A6 84 ZD0DA LDA ,X |
0488 D0DC 81 20 CMPA #$20 |
0489 D0DE 26 04 BNE ZD0E4 |
0490 D0E0 30 01 LEAX $01,X |
0491 D0E2 20 F6 BRA ZD0DA |
0492 D0E4 BF CC 14 ZD0E4 STX >LINPTR |
0493 D0E7 BE CC 3F LDX >ZCC3F |
0494 D0EA 39 RTS |
0495 * |
0496 ** DEFAULT FILE EXTENSION |
0497 * |
0498 D0EB 34 30 SETEX1 PSHS Y,X |
0499 D0ED E6 0C LDB $0C,X |
0500 D0EF 26 18 BNE ZD109 |
0501 D0F1 10 8E D1 0B LDY #EXTTBL |
0502 D0F5 81 0B CMPA #$0B |
0503 D0F7 22 10 BHI ZD109 |
0504 D0F9 C6 03 LDB #$03 |
0505 D0FB 3D MUL |
0506 D0FC 31 A5 LEAY B,Y |
0507 D0FE C6 03 LDB #$03 |
0508 D100 A6 A0 ZD100 LDA ,Y+ |
0509 D102 A7 0C STA $0C,X |
0510 D104 30 01 LEAX $01,X |
0511 D106 5A DECB |
0512 D107 26 F7 BNE ZD100 |
0513 D109 35 B0 ZD109 PULS PC,Y,X |
0514 * |
0515 ** STANDARD FILE NAME EXTTENSIONS |
0516 * |
0517 D10B 42 49 4E EXTTBL FCC "BIN" |
0518 D10E 54 58 54 FCC "TXT" |
0519 D111 43 4D 44 FCC "CMD" |
0520 D114 42 41 53 FCC "BAS" |
0521 D117 53 59 53 FCC "SYS" |
0522 D11A 42 41 4B FCC "BAK" |
0523 D11D 53 43 52 FCC "SCR" |
0524 D120 44 41 54 FCC "DAT" |
0525 D123 42 41 43 FCC "BAC" |
0526 D126 44 49 52 FCC "DIR" |
0527 D129 50 52 54 FCC "PRT" |
0528 D12C 4F 55 54 FCC "OUT" |
0529 * |
0530 ** READ A HEX ADDRESS FROM THE LINE BUFFER |
0531 * |
0532 D12F BD D2 1E GETHX1 JSR >ZD21E |
0533 D132 BD D0 0E ZD132 JSR >NXTCH1 |
0534 D135 25 22 BCS ZD159 |
0535 D137 8D 26 BSR ZD15F |
0536 D139 25 18 BCS ZD153 |
0537 D13B 34 04 PSHS B |
0538 D13D C6 04 LDB #$04 |
0539 D13F 78 CC 1C ZD13F ASL >LODOFF+1 |
0540 D142 79 CC 1B ROL >LODOFF |
0541 D145 5A DECB |
0542 D146 26 F7 BNE ZD13F |
0543 D148 35 04 PULS B |
0544 D14A BB CC 1C ADDA >LODOFF+1 |
0545 D14D B7 CC 1C STA >LODOFF+1 |
0546 D150 5C INCB |
0547 D151 20 DF BRA ZD132 |
0548 |
0549 D153 BD D0 0E ZD153 JSR >NXTCH1 |
0550 D156 24 FB BCC ZD153 |
0551 D158 39 RTS |
0552 |
0553 D159 BE CC 1B ZD159 LDX >LODOFF |
0554 D15C 1C FE ANDCC #$FE |
0555 D15E 39 RTS |
0556 |
0557 D15F 80 47 ZD15F SUBA #$47 |
0558 D161 2A 0F BPL ZD172 |
0559 D163 8B 06 ADDA #$06 |
0560 D165 2A 04 BPL ZD16B |
0561 D167 8B 07 ADDA #$07 |
0562 D169 2A 07 BPL ZD172 |
0563 D16B 8B 0A ZD16B ADDA #$0A |
0564 D16D 2B 03 BMI ZD172 |
0565 D16F 1C FE ANDCC #$FE |
0566 D171 39 RTS |
0567 |
0568 D172 1A 01 ZD172 ORCC #$01 |
0569 D174 39 RTS |
0570 |
0571 D175 BD D2 1E INDEC1 JSR >ZD21E |
0572 D178 BD D0 0E ZD178 JSR >NXTCH1 |
0573 D17B 25 DC BCS ZD159 |
0574 D17D 81 39 CMPA #$39 |
0575 D17F 22 D2 BHI ZD153 |
0576 D181 84 0F ANDA #$0F |
0577 D183 34 04 PSHS B |
0578 D185 34 02 PSHS A |
0579 D187 FC CC 1B LDD >LODOFF |
0580 D18A 58 ASLB |
0581 D18B 49 ROLA |
0582 D18C 58 ASLB |
0583 D18D 49 ROLA |
0584 D18E 58 ASLB |
0585 D18F 49 ROLA |
0586 D190 F3 CC 1B ADDD >LODOFF |
0587 D193 F3 CC 1B ADDD >LODOFF |
0588 D196 EB E0 ADDB ,S+ |
0589 D198 89 00 ADCA #$00 |
0590 D19A FD CC 1B STD >LODOFF |
0591 D19D 35 04 PULS B |
0592 D19F 5C INCB |
0593 D1A0 20 D6 BRA ZD178 |
0594 * |
0595 ** LOAD BINARY FILE |
0596 * |
0597 D1A2 7F CC 1D LOAD1 CLR >TRNFLG |
0598 D1A5 8D 3D ZD1A5 BSR ZD1E4 |
0599 D1A7 81 02 CMPA #$02 |
0600 D1A9 27 15 BEQ ZD1C0 |
0601 D1AB 81 16 CMPA #$16 |
0602 D1AD 26 F6 BNE ZD1A5 |
0603 D1AF 8D 33 BSR ZD1E4 |
0604 D1B1 B7 CC 1E STA >TRNVEC |
0605 D1B4 8D 2E BSR ZD1E4 |
0606 D1B6 B7 CC 1F STA >TRNVEC+1 |
0607 D1B9 86 01 LDA #$01 |
0608 D1BB B7 CC 1D STA >TRNFLG |
0609 D1BE 20 E5 BRA ZD1A5 |
0610 |
0611 D1C0 8D 22 ZD1C0 BSR ZD1E4 |
0612 D1C2 1F 89 TFR A,B |
0613 D1C4 8D 1E BSR ZD1E4 |
0614 D1C6 1E 89 EXG A,B |
0615 D1C8 F3 CC 1B ADDD >LODOFF |
0616 D1CB FD CC 3D STD >ZCC3D |
0617 D1CE 8D 14 BSR ZD1E4 |
0618 D1D0 1F 89 TFR A,B |
0619 D1D2 4D TSTA |
0620 D1D3 27 D0 BEQ ZD1A5 |
0621 D1D5 8D 0D ZD1D5 BSR ZD1E4 |
0622 D1D7 BE CC 3D LDX >ZCC3D |
0623 D1DA A7 80 STA ,X+ |
0624 D1DC BF CC 3D STX >ZCC3D |
0625 D1DF 5A DECB |
0626 D1E0 26 F3 BNE ZD1D5 |
0627 D1E2 20 C1 BRA ZD1A5 |
0628 |
0629 D1E4 8E C8 40 ZD1E4 LDX #FCB |
0630 D1E7 BD D4 06 JSR >FMS |
0631 D1EA 27 11 BEQ ZD1FD |
0632 D1EC A6 01 LDA $01,X |
0633 D1EE 81 08 CMPA #$08 |
0634 D1F0 26 0E BNE ZD200 |
0635 D1F2 32 62 LEAS $02,S |
0636 D1F4 86 04 ZD1F4 LDA #$04 |
0637 D1F6 A7 84 STA ,X |
0638 D1F8 BD D4 06 JSR >FMS |
0639 D1FB 26 0D BNE ZD20A |
0640 D1FD 1C FE ZD1FD ANDCC #$FE |
0641 D1FF 39 RTS |
0642 |
0643 D200 B7 CC 20 ZD200 STA >ERRTYP |
0644 D203 81 04 CMPA #$04 |
0645 D205 26 03 BNE ZD20A |
0646 D207 1A 01 ORCC #$01 |
0647 D209 39 RTS |
0648 |
0649 D20A 8D 73 ZD20A BSR RPTER1 |
0650 D20C 7E CD E4 JMP >ZCDE4 |
0651 * |
0652 ** 'GET' - LOAD BINARY FILE |
0653 * |
0654 D20F 86 00 GETCMD LDA #$00 |
0655 D211 8D 35 BSR ZD248 |
0656 D213 25 0F BCS ZD224 |
0657 D215 8D 07 BSR ZD21E |
0658 D217 7C CC 4C INC >ZCC4C |
0659 D21A 8D 86 BSR LOAD1 |
0660 D21C 20 F1 BRA GETCMD |
0661 |
0662 D21E 4F ZD21E CLRA |
0663 D21F 5F CLRB |
0664 D220 FD CC 1B STD >LODOFF |
0665 D223 39 RTS |
0666 |
0667 D224 F6 CC 4C ZD224 LDB >ZCC4C |
0668 D227 10 27 FB AE LBEQ ZCDD9 |
0669 D22B 7E CD 03 JMP >WARMS |
0670 |
0671 D22E 86 02 ZD22E LDA #$02 |
0672 D230 8D 22 BSR ZD254 |
0673 D232 8D EA BSR ZD21E |
0674 D234 BD D1 A2 JSR >LOAD1 |
0675 D237 F6 CC 1D LDB >TRNFLG |
0676 D23A 27 04 BEQ ZD240 |
0677 D23C 6E 9F CC 1E JMP [TRNVEC] |
0678 |
0679 D240 8E CC 5C ZD240 LDX #NTRMSG |
0680 D243 86 81 LDA #$81 |
0681 D245 7E CD DE JMP >ZCDDE |
0682 |
0683 D248 34 02 ZD248 PSHS A |
0684 D24A 8E C8 40 LDX #FCB |
0685 D24D BD D0 36 JSR >GETFL1 |
0686 D250 35 02 PULS A |
0687 D252 25 1A BCS ZD26E |
0688 D254 8E C8 40 ZD254 LDX #FCB |
0689 D257 BD D0 EB JSR >SETEX1 |
0690 D25A 8E C8 40 LDX #FCB |
0691 D25D 86 01 LDA #$01 |
0692 D25F A7 84 STA ,X |
0693 D261 BD D1 E4 JSR >ZD1E4 |
0694 D264 10 25 00 BB LBCS ZD323 |
0695 D268 86 FF LDA #$FF |
0696 D26A A7 88 3B STA $3B,X |
0697 D26D 39 RTS |
0698 |
0699 D26E B6 CC 11 ZD26E LDA >LASTRM |
0700 D271 81 0D CMPA #$0D |
0701 D273 27 07 BEQ ZD27C |
0702 D275 B1 CC 02 CMPA >EOLCHR |
0703 D278 10 26 FB 5D LBNE ZCDD9 |
0704 D27C 1A 01 ZD27C ORCC #$01 |
0705 D27E 39 RTS |
0706 |
0707 D27F 34 30 RPTER1 PSHS Y,X |
0708 D281 A6 01 LDA $01,X |
0709 D283 B7 CC 20 STA >ERRTYP |
0710 D286 27 63 BEQ ZD2EB |
0711 D288 BD CD EA JSR >RSTIO1 |
0712 D28B 10 BE CC 2D LDY >ERRVEC |
0713 D28F 26 08 BNE ZD299 |
0714 D291 81 10 CMPA #$10 |
0715 D293 27 58 BEQ ZD2ED |
0716 D295 10 8E D3 61 LDY #ZD361 |
0717 D299 8E C8 40 ZD299 LDX #FCB |
0718 D29C 6D 02 TST $02,X |
0719 D29E 27 09 BEQ ZD2A9 |
0720 D2A0 86 04 LDA #$04 |
0721 D2A2 A7 84 STA ,X |
0722 D2A4 BD D4 06 JSR >FMS |
0723 D2A7 26 2E BNE ZD2D7 |
0724 D2A9 8E C8 38 ZD2A9 LDX #ZC838 |
0725 D2AC C6 0B LDB #$0B |
0726 D2AE 8D 6E BSR ZD31E |
0727 D2B0 8E C8 40 LDX #FCB |
0728 D2B3 B6 CC 0B LDA >SYSDRV |
0729 D2B6 A7 03 STA $03,X |
0730 D2B8 86 01 LDA #$01 |
0731 D2BA A7 84 STA ,X |
0732 D2BC BD D4 06 JSR >FMS |
0733 D2BF 26 16 BNE ZD2D7 |
0734 D2C1 B6 CC 20 LDA >ERRTYP |
0735 D2C4 4A DECA |
0736 D2C5 47 ASRA |
0737 D2C6 47 ASRA |
0738 D2C7 4C INCA |
0739 D2C8 6F 88 20 CLR $20,X |
0740 D2CB A7 88 21 STA $21,X |
0741 D2CE 86 15 LDA #$15 |
0742 D2D0 A7 84 STA ,X |
0743 D2D2 BD D4 06 JSR >FMS |
0744 D2D5 27 1E BEQ ZD2F5 |
0745 D2D7 8E CC 75 ZD2D7 LDX #DERMSG |
0746 D2DA BD CE 81 JSR >PSTRG1 |
0747 D2DD BE CC 3F LDX >ZCC3F |
0748 D2E0 B6 CC 20 LDA >ERRTYP |
0749 D2E3 A7 01 STA $01,X |
0750 D2E5 6F 84 CLR ,X |
0751 D2E7 5F CLRB |
0752 D2E8 BD CF 86 JSR >OUTDC1 |
0753 D2EB 35 B0 ZD2EB PULS PC,Y,X |
0754 |
0755 D2ED 8E CC 82 ZD2ED LDX #DNRMSG |
0756 D2F0 BD CE 81 JSR >PSTRG1 |
0757 D2F3 20 F6 BRA ZD2EB |
0758 |
0759 D2F5 BD CE B5 ZD2F5 JSR >PCRLF1 |
0760 D2F8 8E C8 40 LDX #FCB |
0761 D2FB B6 CC 20 LDA >ERRTYP |
0762 D2FE 4A DECA |
0763 D2FF 84 03 ANDA #$03 |
0764 D301 C6 3F LDB #$3F |
0765 D303 3D MUL |
0766 D304 CB 04 ADDB #$04 |
0767 D306 E7 88 22 STB $22,X |
0768 D309 BD D4 06 ZD309 JSR >FMS |
0769 D30C 26 C9 BNE ZD2D7 |
0770 D30E BD CF 41 JSR >PUTCH1 |
0771 D311 81 0D CMPA #$0D |
0772 D313 26 F4 BNE ZD309 |
0773 D315 86 04 LDA #$04 |
0774 D317 A7 84 STA ,X |
0775 D319 BD D4 06 JSR >FMS |
0776 D31C 20 CD BRA ZD2EB |
0777 D31E 34 30 ZD31E PSHS Y,X |
0778 D320 7E D1 00 JMP >ZD100 |
0779 |
0780 D323 8E CC 6B ZD323 LDX #NFDMSG NOT FOUND |
0781 D326 7E CD E1 JMP >ZCDE1 |
0782 * |
0783 ** CALL FLEX AS A SUBROUTINE |
0784 * |
0785 D329 35 06 DOCMD1 PULS B,A |
0786 D32B FD CC 43 STD >ZCC43 |
0787 D32E 10 FF CC 45 ZD32E STS >ZCC45 |
0788 D332 7F CC 20 CLR >ERRTYP |
0789 D335 7C CC 28 INC >CMDFLG |
0790 D338 7E CD B8 JMP >ZCDB8 |
0791 D33B 7F CC 28 ZD33B CLR >CMDFLG |
0792 D33E 10 FE CC 45 LDS >ZCC45 |
0793 D342 F6 CC 20 LDB >ERRTYP |
0794 D345 6E 9F CC 43 JMP [ZCC43] |
0795 * |
0796 ** ADD ACCB TO IX |
0797 * |
0798 D349 3A ADDBX1 ABX |
0799 D34A 39 RTS |
0800 |
0801 D34B 7D CC FC ZD34B TST >ZCCFC |
0802 D34E 26 04 BNE ZD354 |
0803 D350 6E 9F D3 F3 JMP [MONVEC] |
0804 |
0805 D354 8E C8 40 ZD354 LDX #FCB |
0806 D357 86 1B LDA #$1B |
0807 D359 A7 01 STA $01,X |
0808 D35B BD D2 7F JSR >RPTER1 |
0809 D35E 7E CD 67 JMP >WARM1 |
0810 |
0811 D361 45 52 52 4F 52 53 ZD361 FCC /ERRORS/ |
0812 D367 00 00 FCB $00,$00 |
0813 D369 53 59 53 FCC /SYS/ |
0009 END |
0000 INCLUDE "f9-monio.txt" |
0001 * |
0002 ** TERMINAL AND PRINTER DRIVERS |
0003 ** SYS09BUG - Spartan 3 Starter Board |
0004 * |
0005 ** FLEX DRIVER MEMORY MAP: |
0006 ** C700 - C83F PRINTER SPOOLER |
0007 ** CCC0 - CCF7 PRINTER DRIVERS |
0008 ** D370 - D3FF CONSOLE DRIVERS |
0009 ** DE00 - DFAF DISK DRIVERS |
0010 * |
0011 * |
0012 ** INTERRUPT VECTORS |
0013 * |
0014 DFC8 IRQVEC EQU MONRAM+$08 |
0015 DFC2 SWIVEC EQU MONRAM+$02 SWI3 VECTOR |
0016 * |
0017 ** PRINTER DRIVERS |
0018 * |
0019 CCC0 ORG $CCC0 |
0020 CCC0 7E D3 70 PINIT JMP DUMRTS INITIATE PRINTER |
0021 CCD8 ORG $CCD8 |
0022 CCD8 7E D3 70 PCHK JMP DUMRTS CHECK IF PRINTER READY |
0023 CCE4 ORG $CCE4 |
0024 CCE4 7E D3 70 POUT JMP DUMRTS OUTPUT CHR. TO PRINTER |
0025 CCF8 ORG $CCF8 |
0026 CCF8 01 00 00 00 ZCCF8 FCB $01,$00,$00,$00 |
0027 CCFC 00 00 00 00 ZCCFC FCB $00,$00,$00,$00 |
0028 * |
0029 ** CONSOLE DRIVER PATCHES: |
0030 * |
0031 D370 ORG $D370 |
0032 D370 IHND EQU * INTERRUPT HANDLER |
0033 D370 TMON EQU * TIMER ON |
0034 D370 TMOFF EQU * TIMER OFF |
0035 D370 TMINT EQU * TIMER INITIALIZATION |
0036 D370 DUMRTS EQU * |
0037 D370 39 RTS |
0038 * |
0039 ** SBUG MONITOR I/O CALLS |
0040 * |
0041 D371 7E D3 70 TERINZ JMP DUMRTS INITIATE ACIA |
0042 D374 6E 9F F8 04 INCHNE JMP [MONROM+$04] INPUT WITHOUT ECHO |
0043 D378 6E 9F F8 00 MONITR JMP [MONROM+$00] |
0044 D37C 6E 9F F8 08 INCHEK JMP [MONROM+$08] CHECK FOR TERMINAL ENTRY |
0045 D380 6E 9F F8 0A OUTEEE JMP [MONROM+$0A] OUPUT CHARACTER |
0046 D384 6E 9F F8 06 INEEE JMP [MONROM+$06] INPUT WITH ECHO |
0047 |
0048 * |
0049 ** AUTO BLOCK FDBS |
0050 * |
0051 D3E5 ORG $D3E5 |
0052 D3E5 D3 74 ZD3E5 FDB INCHNE INPUT - NO ECHO |
0053 D3E7 D3 70 IHNDVC FDB IHND IRQ INTERRUPT HANDLER |
0054 D3E9 DF C2 SWIVVC FDB SWIVEC SWI3 VECTOR LOCATION |
0055 D3EB DF C8 IRQVVC FDB IRQVEC IRQ VECTOR LOCATION |
0056 D3ED D3 70 TOFVEC FDB TMOFF TIMER OFF ROUTINE |
0057 D3EF D3 70 TONVEC FDB TMON TIMER ON ROUTINE |
0058 D3F1 D3 70 TINVEC FDB TMINT TIMER INITIALIZE ROUTINE |
0059 D3F3 D3 78 MONVEC FDB MONITR MONITOR RETURN ADDRESS |
0060 D3F5 D3 71 TERVEC FDB TERINZ TERMINAL INITIATION |
0061 D3F7 D3 7C STAVEC FDB INCHEK CHECK TERMINAL STATUS |
0062 D3F9 D3 80 OUTVEC FDB OUTEEE TERMINAL CHAR OUTPUT |
0063 D3FB D3 84 INVEC FDB INEEE TERMINAL INPUT CHARACTER |
0064 D3FD 7E CA 00 ZD3FD JMP ZCA00 |
0010 END |
0000 INCLUDE "f9-fms.txt" |
0001 * |
0002 ** FILE MANAGEMENT SYSTEM |
0003 * |
0004 D400 7E D4 36 ZD400 JMP >ZD436 |
0005 D403 7E D4 59 FMSCLS JMP >ZD459 |
0006 D406 7E D4 7B FMS JMP >FMS1 |
0007 D409 20 44 49 53 4B 20 CPYMSG FCC / DISK OPERATING SYSTEM/ |
4F 50 45 52 41 54 |
49 4E 47 20 53 59 |
53 54 45 4D |
0008 D41F 20 43 4F 50 59 52 FCC / COPYRIGHT (C) 1980 BY/ |
49 47 48 54 20 28 |
43 29 20 31 39 38 |
30 20 42 59 |
0009 D435 20 54 45 43 48 4E FCC / TECHNICAL SYSTEMS CONSULTANTS/ |
49 43 41 4C 20 53 |
59 53 54 45 4D 53 |
20 43 4F 4E 53 55 |
4C 54 41 4E 54 53 |
0010 D409 ORG CPYMSG |
0011 D409 FCBPTR RMB 2 |
0012 D40B CURFCB RMB 4 |
0013 D40F ZD40F RMB 2 |
0014 D411 ZD411 RMB 1 |
0015 D412 ZD412 RMB 1 |
0016 D413 ZD413 RMB 1 |
0017 D414 ZD414 RMB 1 |
0018 D415 ZD415 RMB 2 |
0019 D417 ZD417 RMB 1 |
0020 D418 ZD418 RMB 2 |
0021 D41A ZD41A RMB 1 |
0022 D41B ZD41B RMB 2 |
0023 D41D ZD41D RMB 24 |
0024 D435 FF VERFLG FCB $FF |
0025 * |
0026 ** |
0027 * |
0028 D436 BD DE 15 ZD436 JSR >COLDDR |
0029 D439 8E D4 09 LDX #FCBPTR |
0030 D43C C6 0A LDB #$0A |
0031 D43E 8D 11 BSR ZD451 |
0032 D440 8E 00 05 LDX #Z0005 |
0033 D443 BF D4 13 STX >ZD413 |
0034 D446 BF D4 15 STX >ZD415 |
0035 D449 7F D4 1A CLR >ZD41A |
0036 D44C 8E D4 1B ZD44C LDX #ZD41B |
0037 D44F C6 1A LDB #$1A |
0038 D451 6F 80 ZD451 CLR ,X+ |
0039 D453 5A DECB |
0040 D454 26 FB BNE ZD451 |
0041 D456 7E C7 0C JMP >PRSPL5 |
0042 |
0043 D459 BD C7 09 ZD459 JSR >PRSPL4 |
0044 D45C BE D4 09 ZD45C LDX >FCBPTR |
0045 D45F 27 EB BEQ ZD44C |
0046 D461 30 88 E4 LEAX -$1C,X |
0047 D464 BF D4 0B STX >CURFCB |
0048 D467 34 20 PSHS Y |
0049 D469 BD DA C3 JSR >CLOSE |
0050 D46C 35 20 PULS Y |
0051 D46E 24 EC BCC ZD45C |
0052 D470 BE D4 0B LDX >CURFCB |
0053 D473 6F 02 CLR $02,X |
0054 D475 BD C7 0C JSR >PRSPL5 |
0055 D478 C6 FF LDB #$FF |
0056 D47A 39 RTS |
0057 |
0058 * |
0059 ** FMS CALL, PROCESSING |
0060 * |
0061 D47B 7D CC FC FMS1 TST >ZCCFC |
0062 D47E 27 03 BEQ ZD483 |
0063 D480 BD C7 09 JSR >PRSPL4 |
0064 D483 34 24 ZD483 PSHS Y,B |
0065 D485 BF D4 0B STX >CURFCB |
0066 D488 6F 01 CLR $01,X |
0067 D48A E6 84 LDB ,X |
0068 D48C 26 22 BNE DOFUNC |
0069 * |
0070 ** READ/WRITE CHAR/BYTE |
0071 * |
0072 D48E E6 02 LDB $02,X |
0073 D490 27 1A BEQ ZD4AC |
0074 D492 C1 02 CMPB #$02 |
0075 D494 27 11 BEQ ZD4A7 |
0076 D496 BD D5 B4 JSR >ZD5B4 |
0077 D499 BE D4 0B ZD499 LDX >CURFCB |
0078 D49C 25 26 BCS ZD4C4 |
0079 D49E 7D CC FC TST >ZCCFC |
0080 D4A1 26 23 BNE ZD4C6 |
0081 D4A3 5F CLRB |
0082 D4A4 35 24 PULS Y,B |
0083 D4A6 39 RTS |
0084 |
0085 D4A7 BD D6 CF ZD4A7 JSR >ZD6CF |
0086 D4AA 20 ED BRA ZD499 |
0087 D4AC C6 12 ZD4AC LDB #$12 |
0088 D4AE 20 14 BRA ZD4C4 |
0089 |
0090 D4B0 C1 16 DOFUNC CMPB #$16 |
0091 D4B2 23 04 BLS DOFUN1 |
0092 D4B4 C6 01 LDB #$01 |
0093 D4B6 20 0C BRA ZD4C4 |
0094 D4B8 5A DOFUN1 DECB |
0095 D4B9 58 ASLB |
0096 D4BA 8E D4 CE LDX #FMSTBL |
0097 D4BD AD 95 JSR [B,X] |
0098 D4BF BE D4 0B LDX >CURFCB |
0099 D4C2 24 02 BCC ZD4C6 |
0100 D4C4 E7 01 ZD4C4 STB $01,X |
0101 D4C6 BD C7 0C ZD4C6 JSR >PRSPL5 |
0102 D4C9 6D 01 TST $01,X |
0103 D4CB 35 24 PULS Y,B |
0104 D4CD 39 RTS |
0105 * |
0106 ** FMS COMMAND VECTOR TABLE |
0107 * |
0108 D4CE D9 86 FMSTBL FDB OPENRD FC 1 |
0109 D4D0 D9 D9 FDB OPENWR FC 2 |
0110 D4D2 DA F9 FDB OPENUD FC 3 |
0111 D4D4 DA C3 FDB CLOSE FC 4 |
0112 D4D6 D5 E2 FDB REWIND FC 5 |
0113 D4D8 D8 1D FDB OPNDIR FC 6 |
0114 D4DA D8 38 FDB GETREC FC 7 |
0115 D4DC D8 76 FDB PUTREC FC 8 |
0116 D4DE D6 41 FDB RDSECT FC 9 |
0117 D4E0 D6 9F FDB WRSECT FC 10 |
0118 D4E2 D9 69 FDB RESV1 FC 11 |
0119 D4E4 DB D6 FDB DELETE FC 12 |
0120 D4E6 DB 2C FDB RENAME FC 13 |
0121 D4E8 D6 99 FDB RESV2 FC 14 |
0122 D4EA DA 87 FDB NXTSEC FC 15 |
0123 D4EC D8 10 FDB OPNREC FC 16 |
0124 D4EE D5 6F FDB GETBYT FC 17 |
0125 D4F0 D5 90 FDB PUTBYT FC 18 |
0126 D4F2 DB 07 FDB RESV3 FC 19 |
0127 D4F4 DD BD FDB NXTDRV FC 20 |
0128 D4F6 DC FB FDB POSREC FC 21 |
0129 D4F8 DC E5 FDB BAKREC FC 22 |
0130 * |
0131 ** |
0132 * |
0133 D4FA 8D 20 ZD4FA BSR ZD51C |
0134 D4FC 26 05 BNE ZD503 |
0135 D4FE C6 02 LDB #$02 |
0136 D500 1A 01 ORCC #$01 |
0137 D502 39 RTS |
0138 |
0139 D503 ED 84 ZD503 STD ,X |
0140 D505 AE 84 LDX ,X |
0141 D507 6F 84 CLR ,X |
0142 D509 6F 01 CLR $01,X |
0143 D50B 39 RTS |
0144 |
0145 D50C 8D 0E ZD50C BSR ZD51C |
0146 D50E 27 05 BEQ ZD515 |
0147 D510 C6 0D LDB #$0D |
0148 D512 1A 01 ORCC #$01 |
0149 D514 39 RTS |
0150 |
0151 D515 EC 94 ZD515 LDD [,X] |
0152 D517 ED 84 STD ,X |
0153 D519 1C FE ANDCC #$FE |
0154 D51B 39 RTS |
0155 |
0156 D51C FC D4 0B ZD51C LDD >CURFCB |
0157 D51F C3 00 1C ADDD #$001C |
0158 D522 8E D4 09 LDX #FCBPTR |
0159 D525 10 AE 84 ZD525 LDY ,X |
0160 D528 26 03 BNE ZD52D |
0161 D52A 1C FB ANDCC #$FB |
0162 D52C 39 RTS |
0163 |
0164 D52D 10 A3 84 ZD52D CMPD ,X |
0165 D530 26 01 BNE ZD533 |
0166 D532 39 RTS |
0167 D533 AE 84 ZD533 LDX ,X |
0168 D535 20 EE BRA ZD525 |
0169 |
0170 D537 BE D4 0B ZD537 LDX >CURFCB |
0171 D53A 4F CLRA |
0172 D53B 5F CLRB |
0173 D53C 8D 02 BSR ZD540 |
0174 D53E C6 2F LDB #$2F |
0175 D540 A7 88 11 ZD540 STA $11,X |
0176 D543 30 01 LEAX $01,X |
0177 D545 5A DECB |
0178 D546 26 F8 BNE ZD540 |
0179 D548 39 RTS |
0180 |
0181 D549 BE D4 0B ZD549 LDX >CURFCB |
0182 D54C C6 0B LDB #$0B |
0183 D54E A6 04 ZD54E LDA $04,X |
0184 D550 A7 88 24 STA $24,X |
0185 D553 30 01 LEAX $01,X |
0186 D555 5A DECB |
0187 D556 26 F6 BNE ZD54E |
0188 D558 39 RTS |
0189 |
0190 D559 BE D4 0B ZD559 LDX >CURFCB |
0191 D55C C6 0B LDB #$0B |
0192 D55E A6 04 ZD55E LDA $04,X |
0193 D560 34 02 PSHS A |
0194 D562 A6 88 24 LDA $24,X |
0195 D565 A1 E0 CMPA ,S+ |
0196 D567 26 05 BNE ZD56E |
0197 D569 30 01 LEAX $01,X |
0198 D56B 5A DECB |
0199 D56C 26 F0 BNE ZD55E |
0200 D56E 39 ZD56E RTS |
0201 * |
0202 ** GET RANDOM BYTE FROM SECTOR |
0203 * |
0204 D56F BE D4 0B GETBYT LDX >CURFCB |
0205 D572 E6 02 LDB $02,X |
0206 D574 54 LSRB |
0207 D575 24 79 BCC ZD5F0 |
0208 D577 E6 88 23 LDB $23,X |
0209 D57A 7E D6 00 JMP >ZD600 |
0210 |
0211 D57D BE D4 0B ZD57D LDX >CURFCB |
0212 D580 E6 88 22 LDB $22,X |
0213 D583 6C 88 22 INC $22,X |
0214 D586 3A ABX |
0215 D587 A7 88 40 STA $40,X |
0216 D58A 5C INCB |
0217 D58B 26 1F BNE ZD5AC |
0218 D58D 1A 01 ORCC #$01 |
0219 D58F 39 RTS |
0220 * |
0221 ** PUT RANDOM BYTE IN SECTOR |
0222 * |
0223 D590 BE D4 0B PUTBYT LDX >CURFCB |
0224 D593 E6 02 LDB $02,X |
0225 D595 C4 03 ANDB #$03 |
0226 D597 C1 03 CMPB #$03 |
0227 D599 26 55 BNE ZD5F0 |
0228 D59B CA 80 ORB #$80 |
0229 D59D E7 02 STB $02,X |
0230 D59F E6 0F LDB $0F,X |
0231 D5A1 C5 80 BITB #$80 |
0232 D5A3 26 0A BNE ZD5AF |
0233 D5A5 E6 88 23 LDB $23,X |
0234 D5A8 3A ABX |
0235 D5A9 A7 88 40 STA $40,X |
0236 D5AC 1C FE ZD5AC ANDCC #$FE |
0237 D5AE 39 RTS |
0238 |
0239 D5AF C6 0B ZD5AF LDB #$0B |
0240 D5B1 1A 01 ORCC #$01 |
0241 D5B3 39 RTS |
0242 |
0243 D5B4 A6 88 3B ZD5B4 LDA $3B,X |
0244 D5B7 2B 3C BMI ZD5F5 |
0245 D5B9 27 07 BEQ ZD5C2 |
0246 D5BB 6A 88 3B DEC $3B,X |
0247 D5BE 86 20 LDA #$20 |
0248 D5C0 20 1D BRA ZD5DF |
0249 |
0250 D5C2 8D 31 ZD5C2 BSR ZD5F5 |
0251 D5C4 25 1B BCS ZD5E1 |
0252 D5C6 81 18 CMPA #$18 |
0253 D5C8 22 15 BHI ZD5DF |
0254 D5CA 27 F6 BEQ ZD5C2 |
0255 D5CC 81 09 CMPA #$09 |
0256 D5CE 26 0C BNE ZD5DC |
0257 D5D0 8D 23 BSR ZD5F5 |
0258 D5D2 25 0D BCS ZD5E1 |
0259 D5D4 BE D4 0B LDX >CURFCB |
0260 D5D7 A7 88 3B STA $3B,X |
0261 D5DA 20 D8 BRA ZD5B4 |
0262 |
0263 D5DC 4D ZD5DC TSTA |
0264 D5DD 27 E3 BEQ ZD5C2 |
0265 D5DF 1C FE ZD5DF ANDCC #$FE |
0266 D5E1 39 ZD5E1 RTS |
0267 * |
0268 ** REWIND FILE |
0269 * |
0270 D5E2 BD DA B1 REWIND JSR >ZDAB1 |
0271 D5E5 25 09 BCS ZD5F0 |
0272 D5E7 85 01 BITA #$01 |
0273 D5E9 27 05 BEQ ZD5F0 |
0274 D5EB A7 84 STA ,X |
0275 D5ED 7E D9 A0 JMP >ZD9A0 |
0276 |
0277 D5F0 C6 12 ZD5F0 LDB #$12 |
0278 D5F2 1A 01 ORCC #$01 |
0279 D5F4 39 RTS |
0280 |
0281 D5F5 BE D4 0B ZD5F5 LDX >CURFCB |
0282 D5F8 E6 88 22 LDB $22,X |
0283 D5FB 27 0A BEQ ZD607 |
0284 D5FD 6C 88 22 INC $22,X |
0285 D600 3A ZD600 ABX |
0286 D601 A6 88 40 LDA $40,X |
0287 D604 1C FE ANDCC #$FE |
0288 D606 39 RTS |
0289 |
0290 D607 8D 03 ZD607 BSR ZD60C |
0291 D609 24 EA BCC ZD5F5 |
0292 D60B 39 RTS |
0293 |
0294 D60C BE D4 0B ZD60C LDX >CURFCB |
0295 D60F EC 88 40 LDD $40,X |
0296 D612 6C 88 21 INC $21,X |
0297 D615 26 03 BNE ZD61A |
0298 D617 6C 88 20 INC $20,X |
0299 D61A 10 83 00 00 ZD61A CMPD #$0000 |
0300 D61E 27 1C BEQ ZD63C |
0301 D620 ED 88 1E ZD620 STD $1E,X |
0302 D623 34 02 PSHS A |
0303 D625 86 04 LDA #$04 |
0304 D627 A7 88 22 STA $22,X |
0305 D62A 35 02 PULS A |
0306 D62C 8D 13 BSR RDSECT |
0307 D62E 24 10 BCC ZD640 |
0308 D630 C5 80 BITB #$80 |
0309 D632 27 04 BEQ ZD638 |
0310 D634 C6 10 LDB #$10 |
0311 D636 20 06 BRA ZD63E |
0312 |
0313 D638 C6 09 ZD638 LDB #$09 |
0314 D63A 20 02 BRA ZD63E |
0315 |
0316 D63C C6 08 ZD63C LDB #$08 |
0317 D63E 1A 01 ZD63E ORCC #$01 |
0318 D640 39 ZD640 RTS |
0319 * |
0320 ** READ SINGLE SECTOR |
0321 * |
0322 D641 8D 25 RDSECT BSR ZD668 |
0323 D643 BE D4 0B LDX >CURFCB |
0324 D646 BD DE 0C JSR >DRIVE |
0325 D649 25 12 BCS ZD65D |
0326 D64B 8D 11 ZD64B BSR ZD65E |
0327 D64D BD DE 00 JSR >READ |
0328 D650 26 03 BNE ZD655 |
0329 D652 1C FE ANDCC #$FE |
0330 D654 39 RTS |
0331 |
0332 D655 34 04 ZD655 PSHS B |
0333 D657 8D 17 BSR ZD670 |
0334 D659 35 04 PULS B |
0335 D65B 24 EE BCC ZD64B |
0336 D65D 39 ZD65D RTS |
0337 |
0338 D65E BE D4 0B ZD65E LDX >CURFCB |
0339 D661 EC 88 1E LDD $1E,X |
0340 D664 30 88 40 LEAX $40,X |
0341 D667 39 RTS |
0342 |
0343 D668 4F ZD668 CLRA |
0344 D669 B7 D4 11 STA >ZD411 |
0345 D66C B7 D4 12 STA >ZD412 |
0346 D66F 39 RTS |
0347 |
0348 D670 C5 10 ZD670 BITB #$10 |
0349 D672 26 11 BNE ZD685 |
0350 D674 C5 80 BITB #$80 |
0351 D676 26 24 BNE ZD69C |
0352 D678 F6 D4 11 LDB >ZD411 |
0353 D67B 5C INCB |
0354 D67C C1 07 CMPB #$07 |
0355 D67E 27 05 BEQ ZD685 |
0356 D680 F7 D4 11 STB >ZD411 |
0357 D683 20 14 BRA RESV2 |
0358 |
0359 D685 7F D4 11 ZD685 CLR >ZD411 |
0360 D688 F6 D4 12 LDB >ZD412 |
0361 D68B 5C INCB |
0362 D68C C1 04 CMPB #$04 |
0363 D68E 27 0C BEQ ZD69C |
0364 D690 F7 D4 12 STB >ZD412 |
0365 D693 BE D4 0B LDX >CURFCB |
0366 D696 BD DE 09 JSR >RESTOR |
0367 * |
0368 ** RESERVED |
0369 * |
0370 D699 1C FE RESV2 ANDCC #$FE |
0371 D69B 39 RTS |
0372 D69C 1A 01 ZD69C ORCC #$01 |
0373 D69E 39 RTS |
0374 * |
0375 ** WRITE SINGLE SECTOR |
0376 * |
0377 D69F 8D C7 WRSECT BSR ZD668 |
0378 D6A1 BE D4 0B LDX >CURFCB |
0379 D6A4 BD DE 0C JSR >DRIVE |
0380 D6A7 25 20 BCS ZD6C9 |
0381 D6A9 BE D4 0B ZD6A9 LDX >CURFCB |
0382 D6AC 8D B0 BSR ZD65E |
0383 D6AE BD DE 03 JSR >WRITE |
0384 D6B1 26 0A BNE ZD6BD |
0385 D6B3 B6 D4 35 LDA >VERFLG |
0386 D6B6 27 37 BEQ ZD6EF |
0387 D6B8 BD DE 06 JSR >VERIFY |
0388 D6BB 27 32 BEQ ZD6EF |
0389 D6BD C5 40 ZD6BD BITB #$40 |
0390 D6BF 26 0B BNE ZD6CC |
0391 D6C1 34 04 PSHS B |
0392 D6C3 8D AB BSR ZD670 |
0393 D6C5 35 04 PULS B |
0394 D6C7 24 E0 BCC ZD6A9 |
0395 D6C9 39 ZD6C9 RTS |
0396 |
0397 D6CA C6 20 LDB #$20 |
0398 D6CC 1A 01 ZD6CC ORCC #$01 |
0399 D6CE 39 RTS |
0400 |
0401 D6CF BE D4 0B ZD6CF LDX >CURFCB |
0402 D6D2 E6 88 3B LDB $3B,X |
0403 D6D5 2B 3D BMI ZD714 |
0404 D6D7 81 20 CMPA #$20 |
0405 D6D9 26 0F BNE ZD6EA |
0406 D6DB 5C INCB |
0407 D6DC E7 88 3B STB $3B,X |
0408 D6DF C1 7F CMPB #$7F |
0409 D6E1 26 0C BNE ZD6EF |
0410 D6E3 20 0D BRA ZD6F2 |
0411 |
0412 D6E5 8D 0B ZD6E5 BSR ZD6F2 |
0413 D6E7 24 E6 BCC ZD6CF |
0414 D6E9 39 RTS |
0415 |
0416 D6EA 5D ZD6EA TSTB |
0417 D6EB 27 27 BEQ ZD714 |
0418 D6ED 20 F6 BRA ZD6E5 |
0419 |
0420 D6EF 1C FE ZD6EF ANDCC #$FE |
0421 D6F1 39 RTS |
0422 |
0423 D6F2 34 02 ZD6F2 PSHS A |
0424 D6F4 C1 01 CMPB #$01 |
0425 D6F6 26 04 BNE ZD6FC |
0426 D6F8 86 20 LDA #$20 |
0427 D6FA 20 10 BRA ZD70C |
0428 |
0429 D6FC 86 09 ZD6FC LDA #$09 |
0430 D6FE 8D 14 BSR ZD714 |
0431 D700 35 02 PULS A |
0432 D702 25 0F BCS ZD713 |
0433 D704 34 02 PSHS A |
0434 D706 BE D4 0B LDX >CURFCB |
0435 D709 A6 88 3B LDA $3B,X |
0436 D70C 6F 88 3B ZD70C CLR $3B,X |
0437 D70F 8D 03 BSR ZD714 |
0438 D711 35 02 PULS A |
0439 D713 39 ZD713 RTS |
0440 |
0441 D714 BE D4 0B ZD714 LDX >CURFCB |
0442 D717 E6 02 LDB $02,X |
0443 D719 C1 02 CMPB #$02 |
0444 D71B 10 26 FE D1 LBNE ZD5F0 |
0445 D71F E6 88 22 LDB $22,X |
0446 D722 C1 04 CMPB #$04 |
0447 D724 26 08 BNE ZD72E |
0448 D726 34 02 PSHS A |
0449 D728 8D 21 BSR ZD74B |
0450 D72A 35 02 PULS A |
0451 D72C 25 0F BCS ZD73D |
0452 D72E BD D5 7D ZD72E JSR >ZD57D |
0453 D731 24 0A BCC ZD73D |
0454 D733 C6 04 LDB #$04 |
0455 D735 BE D4 0B LDX >CURFCB |
0456 D738 E7 88 22 STB $22,X |
0457 D73B 1C FE ANDCC #$FE |
0458 D73D 39 ZD73D RTS |
0459 |
0460 D73E BE D4 0B ZD73E LDX >CURFCB |
0461 D741 4F CLRA |
0462 D742 5F CLRB |
0463 D743 ED 88 20 STD $20,X |
0464 D746 ED 88 42 STD $42,X |
0465 D749 20 27 BRA ZD772 |
0466 |
0467 D74B E6 88 12 ZD74B LDB $12,X |
0468 D74E 26 22 BNE ZD772 |
0469 D750 E6 88 17 LDB $17,X |
0470 D753 27 44 BEQ ZD799 |
0471 D755 6F 88 17 CLR $17,X |
0472 D758 8D 3F BSR ZD799 |
0473 D75A 25 2A BCS ZD786 |
0474 D75C 8D E0 BSR ZD73E |
0475 D75E 25 26 BCS ZD786 |
0476 D760 8D DC BSR ZD73E |
0477 D762 25 22 BCS ZD786 |
0478 D764 BE D4 0B LDX >CURFCB |
0479 D767 C6 02 LDB #$02 |
0480 D769 E7 88 17 STB $17,X |
0481 D76C EC 88 11 LDD $11,X |
0482 D76F 7E DC 82 JMP >ZDC82 |
0483 |
0484 D772 8D 0E ZD772 BSR ZD782 |
0485 D774 BE D4 0B LDX >CURFCB |
0486 D777 ED 88 40 STD $40,X |
0487 D77A BD D6 9F JSR >WRSECT |
0488 D77D 24 1A BCC ZD799 |
0489 D77F 7E DB C1 JMP >ZDBC1 |
0490 |
0491 D782 8D 03 ZD782 BSR ZD787 |
0492 D784 EC 84 LDD ,X |
0493 D786 39 ZD786 RTS |
0494 |
0495 D787 BE D4 0B ZD787 LDX >CURFCB |
0496 D78A E6 03 LDB $03,X |
0497 D78C 86 06 LDA #$06 |
0498 D78E 3D MUL |
0499 D78F 8E D4 1D LDX #ZD41D |
0500 D792 3A ABX |
0501 D793 BF D4 1B STX >ZD41B |
0502 D796 6D 84 TST ,X |
0503 D798 39 RTS |
0504 |
0505 D799 8D E7 ZD799 BSR ZD782 |
0506 D79B 26 05 BNE ZD7A2 |
0507 D79D C6 07 LDB #$07 |
0508 D79F 1A 01 ZD79F ORCC #$01 |
0509 D7A1 39 RTS |
0510 |
0511 D7A2 BE D4 0B ZD7A2 LDX >CURFCB |
0512 D7A5 ED 88 13 STD $13,X |
0513 D7A8 6D 88 12 TST $12,X |
0514 D7AB 26 03 BNE ZD7B0 |
0515 D7AD ED 88 11 STD $11,X |
0516 D7B0 6C 88 16 ZD7B0 INC $16,X |
0517 D7B3 26 03 BNE ZD7B8 |
0518 D7B5 6C 88 15 INC $15,X |
0519 D7B8 6D 88 17 ZD7B8 TST $17,X |
0520 D7BB 27 0B BEQ ZD7C8 |
0521 D7BD BD DC 43 JSR >ZDC43 |
0522 D7C0 25 DD BCS ZD79F |
0523 D7C2 BE D4 0B LDX >CURFCB |
0524 D7C5 EC 88 13 LDD $13,X |
0525 D7C8 BD D6 20 ZD7C8 JSR >ZD620 |
0526 D7CB 25 D2 BCS ZD79F |
0527 D7CD BE D4 0B LDX >CURFCB |
0528 D7D0 EC 88 40 LDD $40,X |
0529 D7D3 34 06 PSHS B,A |
0530 D7D5 8D B0 BSR ZD787 |
0531 D7D7 35 06 PULS B,A |
0532 D7D9 ED 84 STD ,X |
0533 D7DB 26 0A BNE ZD7E7 |
0534 D7DD 6F 02 CLR $02,X |
0535 D7DF 6F 03 CLR $03,X |
0536 D7E1 6F 04 CLR $04,X |
0537 D7E3 6F 05 CLR $05,X |
0538 D7E5 20 08 BRA ZD7EF |
0539 |
0540 D7E7 10 AE 04 ZD7E7 LDY $04,X |
0541 D7EA 31 3F LEAY -$01,Y |
0542 D7EC 10 AF 04 STY $04,X |
0543 D7EF 4F ZD7EF CLRA |
0544 D7F0 BE D4 0B LDX >CURFCB |
0545 D7F3 6C 88 21 INC $21,X |
0546 D7F6 26 03 BNE ZD7FB |
0547 D7F8 6C 88 20 INC $20,X |
0548 D7FB 5F ZD7FB CLRB |
0549 D7FC A7 88 40 ZD7FC STA $40,X |
0550 D7FF 30 01 LEAX $01,X |
0551 D801 5A DECB |
0552 D802 26 F8 BNE ZD7FC |
0553 D804 BE D4 0B LDX >CURFCB |
0554 D807 EC 88 20 LDD $20,X |
0555 D80A ED 88 42 STD $42,X |
0556 D80D 1C FE ANDCC #$FE |
0557 D80F 39 RTS |
0558 * |
0559 ** OPEN SYSTEM INFO. RECORD |
0560 * |
0561 D810 5F OPNREC CLRB |
0562 D811 34 04 PSHS B |
0563 D813 C6 03 LDB #$03 |
0564 D815 20 0E BRA ZD825 |
0565 D817 BE D4 15 LDX >ZD415 |
0566 D81A BF D4 13 STX >ZD413 |
0567 D81D F6 D4 13 OPNDIR LDB >ZD413 |
0568 D820 34 04 PSHS B |
0569 D822 F6 D4 14 LDB >ZD414 |
0570 D825 BE D4 0B ZD825 LDX >CURFCB |
0571 D828 E7 88 41 STB $41,X |
0572 D82B 35 04 PULS B |
0573 D82D E7 88 40 STB $40,X |
0574 D830 7F D4 18 CLR >ZD418 |
0575 D833 5F CLRB |
0576 D834 E7 88 22 STB $22,X |
0577 D837 39 RTS |
0578 * |
0579 ** GET INFO RECORD |
0580 * |
0581 D838 BE D4 0B GETREC LDX >CURFCB |
0582 D83B E6 88 22 LDB $22,X |
0583 D83E 26 1D BNE ZD85D |
0584 D840 BD D6 0C JSR >ZD60C |
0585 D843 25 30 BCS ZD875 |
0586 D845 BE D4 0B LDX >CURFCB |
0587 D848 7D D4 18 TST >ZD418 |
0588 D84B 26 05 BNE ZD852 |
0589 D84D DC 44 LDD <Z0044 |
0590 D84F FD D4 18 STD >ZD418 |
0591 D852 86 10 ZD852 LDA #$10 |
0592 D854 A7 88 22 STA $22,X |
0593 D857 EC 88 1E LDD $1E,X |
0594 D85A ED 88 2F STD $2F,X |
0595 D85D A6 88 22 ZD85D LDA $22,X |
0596 D860 A7 88 31 STA $31,X |
0597 D863 C6 18 LDB #$18 |
0598 D865 34 14 ZD865 PSHS X,B |
0599 D867 BD D5 F5 JSR >ZD5F5 |
0600 D86A 35 14 PULS X,B |
0601 D86C A7 04 STA $04,X |
0602 D86E 30 01 LEAX $01,X |
0603 D870 5A DECB |
0604 D871 26 F2 BNE ZD865 |
0605 D873 1C FE ANDCC #$FE |
0606 D875 39 ZD875 RTS |
0607 * |
0608 ** PUT INFORMATION RECORD |
0609 * |
0610 D876 BE D4 0B PUTREC LDX >CURFCB |
0611 D879 A6 88 31 LDA $31,X |
0612 D87C A7 88 22 STA $22,X |
0613 D87F C6 18 LDB #$18 |
0614 D881 34 14 ZD881 PSHS X,B |
0615 D883 A6 04 LDA $04,X |
0616 D885 BD D7 14 JSR >ZD714 |
0617 D888 35 14 PULS X,B |
0618 D88A 30 01 LEAX $01,X |
0619 D88C 5A DECB |
0620 D88D 26 F2 BNE ZD881 |
0621 D88F 7E D6 9F JMP >WRSECT |
0622 |
0623 D892 BE D4 0B ZD892 LDX >CURFCB |
0624 D895 A6 03 LDA $03,X |
0625 D897 A7 88 23 STA $23,X |
0626 D89A B6 D4 17 LDA >ZD417 |
0627 D89D 7D D4 1A TST >ZD41A |
0628 D8A0 26 31 BNE ZD8D3 |
0629 D8A2 A7 03 STA $03,X |
0630 D8A4 BE D4 15 LDX >ZD415 |
0631 D8A7 BF D4 13 STX >ZD413 |
0632 D8AA 8C 00 05 ZD8AA CMPX #Z0005 |
0633 D8AD 27 0C BEQ ZD8BB |
0634 D8AF 8D 22 BSR ZD8D3 |
0635 D8B1 23 37 BLS ZD8EA |
0636 D8B3 BE D4 18 LDX >ZD418 |
0637 D8B6 BF D4 13 STX >ZD413 |
0638 D8B9 20 EF BRA ZD8AA |
0639 |
0640 D8BB BE D4 0B ZD8BB LDX >CURFCB |
0641 D8BE A6 88 23 LDA $23,X |
0642 D8C1 A7 03 STA $03,X |
0643 D8C3 2A 0E BPL ZD8D3 |
0644 D8C5 BD DD BD ZD8C5 JSR >NXTDRV |
0645 D8C8 25 36 BCS ZD900 |
0646 D8CA 8D 07 BSR ZD8D3 |
0647 D8CC 23 1C BLS ZD8EA |
0648 D8CE BD DD AD JSR >ZDDAD |
0649 D8D1 20 F2 BRA ZD8C5 |
0650 |
0651 D8D3 BE D4 0B ZD8D3 LDX >CURFCB |
0652 D8D6 7F D4 1A CLR >ZD41A |
0653 D8D9 BD D5 49 JSR >ZD549 |
0654 D8DC BD D8 1D JSR >OPNDIR |
0655 D8DF BD D8 38 ZD8DF JSR >GETREC |
0656 D8E2 24 07 BCC ZD8EB |
0657 D8E4 C1 08 CMPB #$08 |
0658 D8E6 27 18 BEQ ZD900 |
0659 D8E8 1A 01 ORCC #$01 |
0660 D8EA 39 ZD8EA RTS |
0661 |
0662 D8EB BE D4 0B ZD8EB LDX >CURFCB |
0663 D8EE A6 04 LDA $04,X |
0664 D8F0 27 0C BEQ ZD8FE |
0665 D8F2 2A 02 BPL ZD8F6 |
0666 D8F4 8D 0F BSR ZD905 |
0667 D8F6 BD D5 59 ZD8F6 JSR >ZD559 |
0668 D8F9 26 E4 BNE ZD8DF |
0669 D8FB 1C FE ANDCC #$FE |
0670 D8FD 39 RTS |
0671 |
0672 D8FE 8D 05 ZD8FE BSR ZD905 |
0673 D900 1C FB ZD900 ANDCC #$FB |
0674 D902 1C FE ANDCC #$FE |
0675 D904 39 RTS |
0676 |
0677 D905 A6 88 33 ZD905 LDA $33,X |
0678 D908 26 0C BNE ZD916 |
0679 D90A EC 88 2F LDD $2F,X |
0680 D90D ED 88 32 STD $32,X |
0681 D910 A6 88 31 LDA $31,X |
0682 D913 A7 88 34 STA $34,X |
0683 D916 39 ZD916 RTS |
0684 |
0685 D917 BD D7 87 ZD917 JSR >ZD787 |
0686 D91A 26 17 BNE ZD933 |
0687 D91C 8D 18 BSR ZD936 |
0688 D91E 25 15 BCS ZD935 |
0689 D920 C6 06 LDB #$06 |
0690 D922 10 BE D4 0B LDY >CURFCB |
0691 D926 BE D4 1B LDX >ZD41B |
0692 D929 A6 A8 5D ZD929 LDA $5D,Y |
0693 D92C 31 21 LEAY $01,Y |
0694 D92E A7 80 STA ,X+ |
0695 D930 5A DECB |
0696 D931 26 F6 BNE ZD929 |
0697 D933 1C FE ZD933 ANDCC #$FE |
0698 D935 39 ZD935 RTS |
0699 |
0700 D936 BD D8 10 ZD936 JSR >OPNREC |
0701 D939 BD D6 0C JSR >ZD60C |
0702 D93C 25 08 BCS ZD946 |
0703 D93E BE D4 0B LDX >CURFCB |
0704 D941 C6 10 LDB #$10 |
0705 D943 E7 88 22 STB $22,X |
0706 D946 39 ZD946 RTS |
0707 |
0708 D947 BD D7 87 ZD947 JSR >ZD787 |
0709 D94A 8D EA BSR ZD936 |
0710 D94C 25 F8 BCS ZD946 |
0711 D94E C6 06 LDB #$06 |
0712 D950 10 BE D4 0B LDY >CURFCB |
0713 D954 BE D4 1B LDX >ZD41B |
0714 D957 A6 80 ZD957 LDA ,X+ |
0715 D959 A7 A8 5D STA $5D,Y |
0716 D95C 31 21 LEAY $01,Y |
0717 D95E 5A DECB |
0718 D95F 26 F6 BNE ZD957 |
0719 D961 BD D6 9F JSR >WRSECT |
0720 D964 24 E0 BCC ZD946 |
0721 D966 7E DB C1 JMP >ZDBC1 |
0722 * |
0723 ** |
0724 * |
0725 D969 BE D4 0B RESV1 LDX >CURFCB |
0726 D96C 86 02 LDA #$02 |
0727 D96E A7 02 STA $02,X |
0728 D970 EC 88 2F LDD $2F,X |
0729 D973 ED 88 1E STD $1E,X |
0730 D976 BD D6 41 JSR >RDSECT |
0731 D979 25 08 BCS ZD983 |
0732 D97B BD D8 76 JSR >PUTREC |
0733 D97E 24 05 BCC ZD985 |
0734 D980 7E DB C1 JMP >ZDBC1 |
0735 |
0736 D983 C6 0A ZD983 LDB #$0A |
0737 D985 39 ZD985 RTS |
0738 * |
0739 ** OPEN FOR READ |
0740 * |
0741 D986 BD D4 FA OPENRD JSR >ZD4FA |
0742 D989 25 3D BCS ZD9C8 |
0743 D98B BD D8 92 JSR >ZD892 |
0744 D98E 25 38 BCS ZD9C8 |
0745 D990 26 3B BNE ZD9CD |
0746 D992 BE D4 0B LDX >CURFCB |
0747 D995 7D D4 1A TST >ZD41A |
0748 D998 27 06 BEQ ZD9A0 |
0749 D99A A6 0F LDA $0F,X |
0750 D99C 85 20 BITA #$20 |
0751 D99E 26 29 BNE ZD9C9 |
0752 D9A0 BD DC C0 ZD9A0 JSR >ZDCC0 |
0753 D9A3 25 2A BCS ZD9CF |
0754 D9A5 EC 88 11 LDD $11,X |
0755 D9A8 ED 88 40 STD $40,X |
0756 D9AB BD DA 76 JSR >ZDA76 |
0757 D9AE E6 88 17 LDB $17,X |
0758 D9B1 27 13 BEQ ZD9C6 |
0759 D9B3 34 04 ZD9B3 PSHS B |
0760 D9B5 BD D6 0C JSR >ZD60C |
0761 D9B8 35 04 PULS B |
0762 D9BA 25 0C BCS ZD9C8 |
0763 D9BC 5A DECB |
0764 D9BD 26 F4 BNE ZD9B3 |
0765 D9BF BE D4 0B LDX >CURFCB |
0766 D9C2 5F CLRB |
0767 D9C3 E7 88 22 STB $22,X |
0768 D9C6 1C FE ZD9C6 ANDCC #$FE |
0769 D9C8 39 ZD9C8 RTS |
0770 |
0771 D9C9 C6 11 ZD9C9 LDB #$11 |
0772 D9CB 20 02 BRA ZD9CF |
0773 |
0774 D9CD C6 04 ZD9CD LDB #$04 |
0775 D9CF 34 04 ZD9CF PSHS B |
0776 D9D1 BD D5 0C JSR >ZD50C |
0777 D9D4 35 04 PULS B |
0778 D9D6 1A 01 ORCC #$01 |
0779 D9D8 39 RTS |
0780 |
0781 D9D9 BE D4 0B OPENWR LDX >CURFCB |
0782 D9DC 6D 03 TST $03,X |
0783 D9DE 2A 08 BPL ZD9E8 |
0784 D9E0 BD DD BD JSR >NXTDRV |
0785 D9E3 24 03 BCC ZD9E8 |
0786 D9E5 C6 10 LDB #$10 |
0787 D9E7 39 RTS |
0788 |
0789 D9E8 BD D4 FA ZD9E8 JSR >ZD4FA |
0790 D9EB 25 E2 BCS ZD9CF |
0791 D9ED BD D5 37 JSR >ZD537 |
0792 D9F0 BD D9 17 JSR >ZD917 |
0793 D9F3 25 DA BCS ZD9CF |
0794 D9F5 BD D8 92 JSR >ZD892 |
0795 D9F8 25 D5 BCS ZD9CF |
0796 D9FA 26 04 BNE ZDA00 |
0797 D9FC C6 03 LDB #$03 |
0798 D9FE 20 CF BRA ZD9CF |
0799 |
0800 DA00 BD DC C0 ZDA00 JSR >ZDCC0 |
0801 DA03 25 CA BCS ZD9CF |
0802 DA05 BE D4 0B LDX >CURFCB |
0803 DA08 C6 0A LDB #$0A |
0804 DA0A 6F 0F ZDA0A CLR $0F,X |
0805 DA0C 30 01 LEAX $01,X |
0806 DA0E 5A DECB |
0807 DA0F 26 F9 BNE ZDA0A |
0808 DA11 BE D4 0B LDX >CURFCB |
0809 DA14 EC 88 32 LDD $32,X |
0810 DA17 27 27 BEQ ZDA40 |
0811 DA19 ED 88 2F STD $2F,X |
0812 DA1C A6 88 34 LDA $34,X |
0813 DA1F A7 88 31 STA $31,X |
0814 DA22 FC CC 0E LDD >DATERG |
0815 DA25 ED 88 19 STD $19,X |
0816 DA28 B6 CC 10 LDA >YEAR |
0817 DA2B A7 88 1B STA $1B,X |
0818 DA2E BD DD AD JSR >ZDDAD |
0819 DA31 BD D9 69 JSR >RESV1 |
0820 DA34 25 99 BCS ZD9CF |
0821 DA36 8D 3E BSR ZDA76 |
0822 DA38 86 04 LDA #$04 |
0823 DA3A A7 88 22 STA $22,X |
0824 DA3D 1C FE ANDCC #$FE |
0825 DA3F 39 RTS |
0826 |
0827 DA40 BE D4 0B ZDA40 LDX >CURFCB |
0828 DA43 6F 88 17 CLR $17,X |
0829 DA46 6C 88 12 INC $12,X |
0830 DA49 EC 88 2F LDD $2F,X |
0831 DA4C BD D6 20 JSR >ZD620 |
0832 DA4F 25 0D BCS ZDA5E |
0833 DA51 BD D7 72 JSR >ZD772 |
0834 DA54 25 08 BCS ZDA5E |
0835 DA56 BD D6 9F JSR >WRSECT |
0836 DA59 24 06 BCC ZDA61 |
0837 DA5B BD DB C1 JSR >ZDBC1 |
0838 DA5E 7E D9 CF ZDA5E JMP >ZD9CF |
0839 |
0840 DA61 BE D4 0B ZDA61 LDX >CURFCB |
0841 DA64 EC 88 1E LDD $1E,X |
0842 DA67 ED 88 32 STD $32,X |
0843 DA6A 86 10 LDA #$10 |
0844 DA6C A7 88 34 STA $34,X |
0845 DA6F BD D9 47 JSR >ZD947 |
0846 DA72 25 EA BCS ZDA5E |
0847 DA74 20 8A BRA ZDA00 |
0848 |
0849 DA76 BE D4 0B ZDA76 LDX >CURFCB |
0850 DA79 A6 84 LDA ,X |
0851 DA7B A7 02 STA $02,X |
0852 DA7D 6F 84 CLR ,X |
0853 DA7F 6F 88 3B CLR $3B,X |
0854 DA82 4F CLRA |
0855 DA83 A7 88 22 STA $22,X |
0856 DA86 39 RTS |
0857 * |
0858 ** READ/WRITE NEXT SECTOR |
0859 * |
0860 DA87 8D 28 NXTSEC BSR ZDAB1 |
0861 DA89 25 0E BCS ZDA99 |
0862 DA8B 6F 84 CLR ,X |
0863 DA8D 44 LSRA |
0864 DA8E 10 25 FB 7A LBCS ZD60C |
0865 DA92 C6 04 LDB #$04 |
0866 DA94 E7 88 22 STB $22,X |
0867 DA97 1C FE ANDCC #$FE |
0868 DA99 39 ZDA99 RTS |
0869 |
0870 DA9A BE D4 0B ZDA9A LDX >CURFCB |
0871 DA9D A6 02 LDA $02,X |
0872 DA9F 81 83 CMPA #$83 |
0873 DAA1 26 0B BNE ZDAAE |
0874 DAA3 86 03 LDA #$03 |
0875 DAA5 A7 02 STA $02,X |
0876 DAA7 BD D6 9F ZDAA7 JSR >WRSECT |
0877 DAAA 10 25 01 13 LBCS ZDBC1 |
0878 DAAE 1C FE ZDAAE ANDCC #$FE |
0879 DAB0 39 RTS |
0880 |
0881 DAB1 8D E7 ZDAB1 BSR ZDA9A |
0882 DAB3 25 0D BCS ZDAC2 |
0883 DAB5 BE D4 0B LDX >CURFCB |
0884 DAB8 A6 02 LDA $02,X |
0885 DABA 81 03 CMPA #$03 |
0886 DABC 23 F0 BLS ZDAAE |
0887 DABE C6 12 LDB #$12 |
0888 DAC0 1A 01 ORCC #$01 |
0889 DAC2 39 ZDAC2 RTS |
0890 |
0891 DAC3 8D EC CLOSE BSR ZDAB1 |
0892 DAC5 25 31 BCS ZDAF8 |
0893 DAC7 81 02 CMPA #$02 |
0894 DAC9 27 08 BEQ ZDAD3 |
0895 DACB BE D4 0B ZDACB LDX >CURFCB |
0896 DACE 6F 02 CLR $02,X |
0897 DAD0 7E D5 0C JMP >ZD50C |
0898 |
0899 DAD3 A6 88 12 ZDAD3 LDA $12,X |
0900 DAD6 26 05 BNE ZDADD |
0901 DAD8 BD DB A7 JSR >ZDBA7 |
0902 DADB 20 19 BRA ZDAF6 |
0903 |
0904 DADD 8D C8 ZDADD BSR ZDAA7 |
0905 DADF 25 17 BCS ZDAF8 |
0906 DAE1 BE D4 0B LDX >CURFCB |
0907 DAE4 6D 88 17 TST $17,X |
0908 DAE7 27 05 BEQ ZDAEE |
0909 DAE9 BD DC 98 JSR >ZDC98 |
0910 DAEC 25 0A BCS ZDAF8 |
0911 DAEE BD D9 69 ZDAEE JSR >RESV1 |
0912 DAF1 25 05 BCS ZDAF8 |
0913 DAF3 BD D9 47 JSR >ZD947 |
0914 DAF6 24 D3 ZDAF6 BCC ZDACB |
0915 DAF8 39 ZDAF8 RTS |
0916 * |
0917 ** OPEN FOR UPDATE |
0918 * |
0919 DAF9 BD D9 86 OPENUD JSR >OPENRD |
0920 DAFC 25 28 BCS ZDB26 |
0921 DAFE BD D6 0C JSR >ZD60C |
0922 DB01 25 23 BCS ZDB26 |
0923 DB03 86 03 LDA #$03 |
0924 DB05 20 18 BRA ZDB1F |
0925 * |
0926 ** |
0927 * |
0928 DB07 BD D9 86 RESV3 JSR >OPENRD |
0929 DB0A 25 1A BCS ZDB26 |
0930 DB0C BE D4 0B LDX >CURFCB |
0931 DB0F A6 0F LDA $0F,X |
0932 DB11 85 80 BITA #$80 |
0933 DB13 26 12 BNE ZDB27 |
0934 DB15 EC 88 13 LDD $13,X |
0935 DB18 BD D6 20 JSR >ZD620 |
0936 DB1B 25 09 BCS ZDB26 |
0937 DB1D 86 02 LDA #$02 |
0938 DB1F BE D4 0B ZDB1F LDX >CURFCB |
0939 DB22 A7 02 STA $02,X |
0940 DB24 1C FE ANDCC #$FE |
0941 DB26 39 ZDB26 RTS |
0942 |
0943 DB27 C6 0B ZDB27 LDB #$0B |
0944 DB29 1A 01 ORCC #$01 |
0945 DB2B 39 RTS |
0946 * |
0947 ** RENAME FILE |
0948 * |
0949 DB2C 8D 35 RENAME BSR ZDB63 |
0950 DB2E BD D8 92 JSR >ZD892 |
0951 DB31 25 2A BCS ZDB5D |
0952 DB33 27 24 BEQ ZDB59 |
0953 DB35 BE D4 0B LDX >CURFCB |
0954 DB38 C6 0B LDB #$0B |
0955 DB3A A6 88 24 ZDB3A LDA $24,X |
0956 DB3D A7 04 STA $04,X |
0957 DB3F 30 01 LEAX $01,X |
0958 DB41 5A DECB |
0959 DB42 26 F6 BNE ZDB3A |
0960 DB44 8D 4D BSR ZDB93 |
0961 DB46 25 15 BCS ZDB5D |
0962 DB48 BE D4 0B LDX >CURFCB |
0963 DB4B A6 0F LDA $0F,X |
0964 DB4D 85 80 BITA #$80 |
0965 DB4F 26 D6 BNE ZDB27 |
0966 DB51 85 60 BITA #$60 |
0967 DB53 26 09 BNE ZDB5E |
0968 DB55 8D 0C BSR ZDB63 |
0969 DB57 20 55 BRA ZDBAE |
0970 |
0971 DB59 C6 03 ZDB59 LDB #$03 |
0972 DB5B 1A 01 ORCC #$01 |
0973 DB5D 39 ZDB5D RTS |
0974 DB5E C6 0C ZDB5E LDB #$0C |
0975 DB60 1A 01 ORCC #$01 |
0976 DB62 39 RTS |
0977 |
0978 DB63 BE D4 0B ZDB63 LDX >CURFCB |
0979 DB66 86 0B LDA #$0B |
0980 DB68 B7 D4 11 STA >ZD411 |
0981 DB6B A6 04 ZDB6B LDA $04,X |
0982 DB6D E6 88 35 LDB $35,X |
0983 DB70 A7 88 35 STA $35,X |
0984 DB73 E7 04 STB $04,X |
0985 DB75 30 01 LEAX $01,X |
0986 DB77 7A D4 11 DEC >ZD411 |
0987 DB7A 26 EF BNE ZDB6B |
0988 DB7C BE D4 0B LDX >CURFCB |
0989 DB7F A6 0C LDA $0C,X |
0990 DB81 26 0C BNE ZDB8F |
0991 DB83 C6 03 LDB #$03 |
0992 DB85 A6 88 3D ZDB85 LDA $3D,X |
0993 DB88 A7 0C STA $0C,X |
0994 DB8A 30 01 LEAX $01,X |
0995 DB8C 5A DECB |
0996 DB8D 26 F6 BNE ZDB85 |
0997 DB8F BE D4 0B ZDB8F LDX >CURFCB |
0998 DB92 39 RTS |
0999 |
1000 DB93 8D CE ZDB93 BSR ZDB63 |
1001 DB95 BD D8 92 ZDB95 JSR >ZD892 |
1002 DB98 25 07 BCS ZDBA1 |
1003 DB9A 26 06 BNE ZDBA2 |
1004 DB9C BE D4 0B LDX >CURFCB |
1005 DB9F 1C FE ANDCC #$FE |
1006 DBA1 39 ZDBA1 RTS |
1007 |
1008 DBA2 C6 04 ZDBA2 LDB #$04 |
1009 DBA4 1A 01 ORCC #$01 |
1010 DBA6 39 RTS |
1011 |
1012 DBA7 BE D4 0B ZDBA7 LDX >CURFCB |
1013 DBAA 86 FF LDA #$FF |
1014 DBAC A7 04 STA $04,X |
1015 DBAE BD D9 69 ZDBAE JSR >RESV1 |
1016 DBB1 BE D4 0B LDX >CURFCB |
1017 DBB4 86 00 LDA #$00 |
1018 DBB6 A7 02 STA $02,X |
1019 DBB8 39 RTS |
1020 |
1021 DBB9 ED 88 40 ZDBB9 STD $40,X |
1022 DBBC BD D6 9F JSR >WRSECT |
1023 DBBF 24 14 BCC ZDBD5 |
1024 DBC1 C5 40 ZDBC1 BITB #$40 |
1025 DBC3 26 08 BNE ZDBCD |
1026 DBC5 C5 80 BITB #$80 |
1027 DBC7 27 0A BEQ ZDBD3 |
1028 DBC9 C6 10 LDB #$10 |
1029 DBCB 20 06 BRA ZDBD3 |
1030 DBCD C6 0B ZDBCD LDB #$0B |
1031 DBCF 20 02 BRA ZDBD3 |
1032 |
1033 DBD1 C6 0A LDB #$0A |
1034 DBD3 1A 01 ZDBD3 ORCC #$01 |
1035 DBD5 39 ZDBD5 RTS |
1036 * |
1037 ** DELETE FILE |
1038 * |
1039 DBD6 BD D9 17 DELETE JSR >ZD917 |
1040 DBD9 25 5E BCS ZDC39 |
1041 DBDB 8D B8 BSR ZDB95 |
1042 DBDD 25 5A BCS ZDC39 |
1043 DBDF BE D4 0B LDX >CURFCB |
1044 DBE2 A6 0F LDA $0F,X |
1045 DBE4 85 80 BITA #$80 |
1046 DBE6 26 52 BNE ZDC3A |
1047 DBE8 85 60 BITA #$60 |
1048 DBEA 26 52 BNE ZDC3E |
1049 DBEC BD D7 87 JSR >ZD787 |
1050 DBEF BE D4 1B LDX >ZD41B |
1051 DBF2 EC 02 LDD $02,X |
1052 DBF4 26 0F BNE ZDC05 |
1053 DBF6 BE D4 0B LDX >CURFCB |
1054 DBF9 EC 88 11 LDD $11,X |
1055 DBFC 27 33 BEQ ZDC31 |
1056 DBFE BE D4 1B LDX >ZD41B |
1057 DC01 ED 84 STD ,X |
1058 DC03 20 14 BRA ZDC19 |
1059 |
1060 DC05 BE D4 0B ZDC05 LDX >CURFCB |
1061 DC08 BD D6 20 JSR >ZD620 |
1062 DC0B 25 2C BCS ZDC39 |
1063 DC0D BE D4 0B LDX >CURFCB |
1064 DC10 EC 88 11 LDD $11,X |
1065 DC13 27 1C BEQ ZDC31 |
1066 DC15 8D A2 BSR ZDBB9 |
1067 DC17 25 20 BCS ZDC39 |
1068 DC19 BE D4 0B ZDC19 LDX >CURFCB |
1069 DC1C EC 88 13 LDD $13,X |
1070 DC1F BE D4 1B LDX >ZD41B |
1071 DC22 ED 02 STD $02,X |
1072 DC24 BE D4 0B LDX >CURFCB |
1073 DC27 EC 88 15 LDD $15,X |
1074 DC2A BE D4 1B LDX >ZD41B |
1075 DC2D E3 04 ADDD $04,X |
1076 DC2F ED 04 STD $04,X |
1077 DC31 BD DB A7 ZDC31 JSR >ZDBA7 |
1078 DC34 25 03 BCS ZDC39 |
1079 DC36 BD D9 47 JSR >ZD947 |
1080 DC39 39 ZDC39 RTS |
1081 |
1082 DC3A C6 0B ZDC3A LDB #$0B |
1083 DC3C 20 02 BRA ZDC40 |
1084 DC3E C6 0C ZDC3E LDB #$0C |
1085 DC40 1A 01 ZDC40 ORCC #$01 |
1086 DC42 39 RTS |
1087 |
1088 DC43 EC 88 1E ZDC43 LDD $1E,X |
1089 DC46 5C INCB |
1090 DC47 E1 88 3C CMPB $3C,X |
1091 DC4A 23 03 BLS ZDC4F |
1092 DC4C C6 01 LDB #$01 |
1093 DC4E 4C INCA |
1094 DC4F 10 A3 88 13 ZDC4F CMPD $13,X |
1095 DC53 26 0E BNE ZDC63 |
1096 DC55 A6 88 37 LDA $37,X |
1097 DC58 81 FF CMPA #$FF |
1098 DC5A 27 07 BEQ ZDC63 |
1099 DC5C 4C INCA |
1100 DC5D A7 88 37 STA $37,X |
1101 DC60 1C FE ANDCC #$FE |
1102 DC62 39 RTS |
1103 |
1104 DC63 8D 33 ZDC63 BSR ZDC98 |
1105 DC65 25 30 BCS ZDC97 |
1106 DC67 BE D4 0B LDX >CURFCB |
1107 DC6A A6 88 3A LDA $3A,X |
1108 DC6D 8B 03 ADDA #$03 |
1109 DC6F 26 16 BNE ZDC87 |
1110 DC71 EC 88 1E LDD $1E,X |
1111 DC74 10 A3 88 11 CMPD $11,X |
1112 DC78 27 05 BEQ ZDC7F |
1113 DC7A C6 17 LDB #$17 |
1114 DC7C 1A 01 ORCC #$01 |
1115 DC7E 39 RTS |
1116 |
1117 DC7F EC 88 40 ZDC7F LDD $40,X |
1118 DC82 ED 88 38 ZDC82 STD $38,X |
1119 DC85 86 04 LDA #$04 |
1120 DC87 A7 88 3A ZDC87 STA $3A,X |
1121 DC8A EC 88 13 LDD $13,X |
1122 DC8D ED 88 35 STD $35,X |
1123 DC90 86 01 LDA #$01 |
1124 DC92 A7 88 37 STA $37,X |
1125 DC95 1C FE ANDCC #$FE |
1126 DC97 39 ZDC97 RTS |
1127 |
1128 DC98 EC 88 38 ZDC98 LDD $38,X |
1129 DC9B BD D6 20 JSR >ZD620 |
1130 DC9E 25 F7 BCS ZDC97 |
1131 DCA0 BE D4 0B LDX >CURFCB |
1132 DCA3 1F 12 TFR X,Y |
1133 DCA5 E6 88 3A LDB $3A,X |
1134 DCA8 3A ABX |
1135 DCA9 C6 03 LDB #$03 |
1136 DCAB A6 A8 35 ZDCAB LDA $35,Y |
1137 DCAE 31 21 LEAY $01,Y |
1138 DCB0 A7 88 40 STA $40,X |
1139 DCB3 30 01 LEAX $01,X |
1140 DCB5 5A DECB |
1141 DCB6 26 F3 BNE ZDCAB |
1142 DCB8 BD D6 9F JSR >WRSECT |
1143 DCBB 24 DA BCC ZDC97 |
1144 DCBD 7E DB C1 JMP >ZDBC1 |
1145 |
1146 DCC0 BD D8 10 ZDCC0 JSR >OPNREC |
1147 DCC3 BD D6 0C JSR >ZD60C |
1148 DCC6 25 46 BCS ZDD0E |
1149 DCC8 BE D4 0B LDX >CURFCB |
1150 DCCB 4F CLRA |
1151 DCCC 5F CLRB |
1152 DCCD ED 88 20 STD $20,X |
1153 DCD0 A6 88 67 LDA $67,X |
1154 DCD3 A7 88 3C STA $3C,X |
1155 DCD6 5F CLRB |
1156 DCD7 6F 88 40 ZDCD7 CLR $40,X |
1157 DCDA 30 01 LEAX $01,X |
1158 DCDC 5A DECB |
1159 DCDD 26 F8 BNE ZDCD7 |
1160 DCDF BE D4 0B LDX >CURFCB |
1161 DCE2 1C FE ANDCC #$FE |
1162 DCE4 39 RTS |
1163 * |
1164 ** BACKUP ONE RECORD |
1165 * |
1166 DCE5 BE D4 0B BAKREC LDX >CURFCB |
1167 DCE8 A6 88 17 LDA $17,X |
1168 DCEB 27 1D BEQ ZDD0A |
1169 DCED EC 88 20 LDD $20,X |
1170 DCF0 83 00 01 SUBD #$0001 |
1171 DCF3 2A 03 BPL ZDCF8 |
1172 DCF5 7E DD 9A JMP >ZDD9A |
1173 * |
1174 ** POSITION TO RECORD N |
1175 * |
1176 DCF8 ED 88 20 ZDCF8 STD $20,X |
1177 DCFB BD DA B1 POSREC JSR >ZDAB1 |
1178 DCFE 25 0E BCS ZDD0E |
1179 DD00 46 RORA |
1180 DD01 24 07 BCC ZDD0A |
1181 DD03 6F 84 CLR ,X |
1182 DD05 A6 88 17 LDA $17,X |
1183 DD08 26 05 BNE ZDD0F |
1184 DD0A C6 12 ZDD0A LDB #$12 |
1185 DD0C 1A 01 ORCC #$01 |
1186 DD0E 39 ZDD0E RTS |
1187 |
1188 DD0F 7F D4 11 ZDD0F CLR >ZD411 |
1189 DD12 EC 88 11 LDD $11,X |
1190 DD15 10 AE 88 20 LDY $20,X |
1191 DD19 27 6A BEQ ZDD85 |
1192 DD1B BD DD 9F JSR >ZDD9F |
1193 DD1E 25 EE BCS ZDD0E |
1194 DD20 4F CLRA |
1195 DD21 5F CLRB |
1196 DD22 6D 02 ZDD22 TST $02,X |
1197 DD24 27 74 BEQ ZDD9A |
1198 DD26 EB 02 ADDB $02,X |
1199 DD28 89 00 ADCA #$00 |
1200 DD2A BF D4 0F STX >ZD40F |
1201 DD2D BE D4 0B LDX >CURFCB |
1202 DD30 10 A3 88 20 CMPD $20,X |
1203 DD34 24 2C BCC ZDD62 |
1204 DD36 BE D4 0F LDX >ZD40F |
1205 DD39 30 03 LEAX $03,X |
1206 DD3B 34 02 PSHS A |
1207 DD3D B6 D4 11 LDA >ZD411 |
1208 DD40 4C INCA |
1209 DD41 B7 D4 11 STA >ZD411 |
1210 DD44 81 54 CMPA #$54 |
1211 DD46 27 08 BEQ ZDD50 |
1212 DD48 81 A8 CMPA #$A8 |
1213 DD4A 35 02 PULS A |
1214 DD4C 27 4C BEQ ZDD9A |
1215 DD4E 20 D2 BRA ZDD22 |
1216 |
1217 DD50 34 04 ZDD50 PSHS B |
1218 DD52 BE D4 0B LDX >CURFCB |
1219 DD55 EC 88 40 LDD $40,X |
1220 DD58 8D 45 BSR ZDD9F |
1221 DD5A 25 3E BCS ZDD9A |
1222 DD5C 35 04 PULS B |
1223 DD5E 35 02 PULS A |
1224 DD60 20 C0 BRA ZDD22 |
1225 |
1226 DD62 A3 88 20 ZDD62 SUBD $20,X |
1227 DD65 BE D4 0F LDX >ZD40F |
1228 DD68 A6 02 LDA $02,X |
1229 DD6A 34 04 PSHS B |
1230 DD6C A0 E0 SUBA ,S+ |
1231 DD6E 4A DECA |
1232 DD6F 1F 89 TFR A,B |
1233 DD71 A6 84 LDA ,X |
1234 DD73 EB 01 ADDB $01,X |
1235 DD75 BE D4 0B LDX >CURFCB |
1236 DD78 25 05 BCS ZDD7F |
1237 DD7A E1 88 3C ZDD7A CMPB $3C,X |
1238 DD7D 23 06 BLS ZDD85 |
1239 DD7F E0 88 3C ZDD7F SUBB $3C,X |
1240 DD82 4C INCA |
1241 DD83 20 F5 BRA ZDD7A |
1242 |
1243 DD85 BD D6 20 ZDD85 JSR >ZD620 |
1244 DD88 25 14 BCS ZDD9E |
1245 DD8A BE D4 0B LDX >CURFCB |
1246 DD8D EC 88 42 LDD $42,X |
1247 DD90 10 A3 88 20 CMPD $20,X |
1248 DD94 27 14 BEQ ZDDAA |
1249 DD96 C6 19 LDB #$19 |
1250 DD98 20 02 BRA ZDD9C |
1251 |
1252 DD9A C6 18 ZDD9A LDB #$18 |
1253 DD9C 1A 01 ZDD9C ORCC #$01 |
1254 DD9E 39 ZDD9E RTS |
1255 |
1256 DD9F BD D6 20 ZDD9F JSR >ZD620 |
1257 DDA2 25 08 BCS ZDDAC |
1258 DDA4 BE D4 0B LDX >CURFCB |
1259 DDA7 C6 44 LDB #$44 |
1260 DDA9 3A ABX |
1261 DDAA 1C FE ZDDAA ANDCC #$FE |
1262 DDAC 39 ZDDAC RTS |
1263 |
1264 DDAD BE D4 0B ZDDAD LDX >CURFCB |
1265 DDB0 C6 0B LDB #$0B |
1266 DDB2 A6 88 24 ZDDB2 LDA $24,X |
1267 DDB5 A7 04 STA $04,X |
1268 DDB7 30 01 LEAX $01,X |
1269 DDB9 5A DECB |
1270 DDBA 26 F6 BNE ZDDB2 |
1271 DDBC 39 RTS |
1272 * |
1273 ** FIND NEXT DRIVE |
1274 * |
1275 DDBD BE D4 0B NXTDRV LDX >CURFCB |
1276 DDC0 A6 03 LDA $03,X |
1277 DDC2 4C INCA |
1278 DDC3 81 04 CMPA #$04 |
1279 DDC5 24 0F BCC ZDDD6 |
1280 DDC7 A7 03 STA $03,X |
1281 DDC9 26 05 BNE ZDDD0 |
1282 DDCB BD DE 0F JSR >DRVRDY |
1283 DDCE 20 03 BRA ZDDD3 |
1284 |
1285 DDD0 BD DE 12 ZDDD0 JSR >QUICK |
1286 DDD3 25 E8 ZDDD3 BCS NXTDRV |
1287 DDD5 39 RTS |
1288 |
1289 DDD6 C6 10 ZDDD6 LDB #$10 |
1290 DDD8 1A 01 ORCC #$01 |
1291 DDDA 39 RTS |
0011 END |
0000 INCLUDE "f9-monex.txt" |
0001 * |
0002 ** FLEX 9 DISK DRIVERS |
0003 * |
0004 * FOR SYS09BUG ON THE |
0005 * DIGILENT SPARTAN 3 STARTER BOARD AND |
0006 * TERASIC CYCLONE 2 DE1 BOARD |
0007 * WITH I/O MAPPED AT $XE000 |
0008 * AND ROM MAPPED AT $XF000 |
0009 * THE DIGILENT SPARTAN 3 STARTER BOARD HAS 1MBYTE OF SRAM |
0010 * THE TERASIC CYCLONE 2 DE1 BOARD HAS 512KBYTE OF SRAM |
0011 * THE FIRST 64K IS USED BY FLEX, |
0012 * THE SECOND 128K IS USED AS A ROM DISK |
0013 * THE REMAINING RAM IS USED FOR A RAM DISK |
0014 * |
0015 * |
0016 0001 CFLAG EQU $01 CARRY FLAG |
0017 0002 VFLAG EQU $02 OVERFLOW FLAG |
0018 0004 ZFLAG EQU $04 ZERO FLAG |
0019 0008 NFLAG EQU $08 NEGATIVE FLAG |
0020 0010 IFLAG EQU $10 IRQ MASK CC |
0021 0020 HFLAG EQU $20 HALF CARRY |
0022 0040 FFLAG EQU $40 FIRQ MASK CC |
0023 0080 EFLAG EQU $80 ENTIRE FLAG |
0024 * |
0025 0000 MAPPAG EQU $00 PAGE $0000 DAT ADDRESS |
0026 FFF0 DATREG EQU IC11 DAT REGISTERS |
0027 * |
0028 * Serial Port |
0029 * |
0030 E000 ACIAC1 EQU ACIAS |
0031 E001 ACIAD1 EQU ACIAS+1 |
0032 04E2 DELCON EQU 1250 Delay (Processor clock in MHz * 50) |
0033 * |
0034 * XMODEM Control characters |
0035 * |
0036 0001 SOH EQU $01 |
0037 0004 EOT EQU $04 |
0038 0006 ACK EQU $06 |
0039 0015 NAK EQU $15 |
0040 0018 CAN EQU $18 |
0041 * |
0042 * DRIVE GEOMETRY |
0043 * |
0044 000E EMAXSEC EQU 14 ROM DISK |
0045 0030 EMAXTRK EQU 48 3 * 16 * 14 * 256 = 172,032 Bytes |
0046 0292 ETOTSEC EQU EMAXTRK*EMAXSEC-EMAXSEC |
0047 * |
0048 000E RMAXSEC EQU 14 RAM DISK |
0049 *RMAXTRK EQU 192 12 * 16 * 14 * 256 = 688,128 Bytes Digilent Spartan 3 |
0050 0040 RMAXTRK EQU 64 4 * 16 * 14 * 256 = 229,376 Bytes Terasic Cyclone 2 |
0051 0372 RTOTSEC EQU RMAXTRK*RMAXSEC-RMAXSEC |
0052 * |
0053 * DRIVE TYPES |
0054 * |
0055 0000 DTYPROM EQU 0 ROM DISK |
0056 0001 DTYPRAM EQU 1 RAM DISK |
0057 0002 DTYPFLS EQU 2 FLASH DISK |
0058 0003 DTYPNET EQU 3 FLEXNET DISK |
0059 * |
0060 DE00 ORG $DE00 |
0061 * |
0062 * DISK DRIVER JUMP TABLE LAST UPDATE: 22/12/2006 |
0063 * Disk driver for RAM Disk. |
0064 * |
0065 * 14 SECTORS PER TRACK |
0066 * 16 * N TRACKS PER DISK |
0067 * |
0068 * ROM DISK OCCUPIES $10000 - $1E000 ... $30000 - $3E000 |
0069 * RAM DISK OCCUPIES $40000 - $4E000 ... $F0000 - $FE000 |
0070 * Track Buffer page mapped at $E000 - $EFFF |
0071 * MAPPAG = $00 = 0 x $1000 (4 K pages) |
0072 |
0073 * ON SWTPC ROM AT $XF000 AND IO AT $XE000 |
0074 * APPEARS THROUGHOUT THE MEMORY SO MUST BE SKIPPED OVER |
0075 * WHEN USING RAM AS A RAMDISK. |
0076 * THE MSN OF THE TRACK MAPS INTO THE MSN OF THE DAT |
0077 * THE LSN OF THE TRACK NUMBER INDEXES INTO THE 4K RAM PAGE |
0078 * THE SECTOR MAPS INTO THE LSN OF THE DAT WHICH IS INVERTED |
0079 * |
0080 * |
0081 * |
0082 * FLEX disk jump table. |
0083 * |
0084 DE00 7E F0 57 READ JMP READSC |
0085 DE03 7E F0 5B WRITE JMP WRITSC |
0086 DE06 7E F0 5F VERIFY JMP BUSY |
0087 DE09 7E F0 63 RESTOR JMP RESTR1 |
0088 DE0C 7E F0 6C DRIVE JMP DRVSEL |
0089 DE0F 7E F0 9F DRVRDY JMP CHKRDY |
0090 DE12 7E F0 A3 QUICK JMP CHKQIK |
0091 DE15 7E F0 A7 COLDDR JMP DINIT |
0092 DE18 7E F0 BF WARMDR JMP DWARM |
0093 DE1B 7E F0 C3 SEEK JMP SEEKTS |
0094 * |
0095 * RAM SPACE |
0096 * |
0097 DE1E 00 DRVNUM FCB 0 |
0098 DE1F 00 TRACK FCB 0 |
0099 DE20 00 SECTOR FCB 0 |
0100 DE21 00 CHKSUM FCB 0 |
0101 DE22 00 CCSAVE FCB 0 |
0102 DE23 00 BLKNUM FCB 0 Xmodem block number |
0103 DE24 00 BYTCNT FCB 0 Xmodem byte count |
0104 DE25 00 00 XSTATE FDB 0 Xmodem State Vector |
0105 DE27 00 00 00 DELCNT FCB $00,$00,$00 Xmodem Poll timer |
0106 * |
0107 * Disc driver type table. |
0108 * Indexed by drive number |
0109 * |
0110 DE2A 00 DTYPTAB FCB DTYPROM Drive 0 (ROM Disk) |
0111 DE2B 01 FCB DTYPRAM Drive 1 (RAM Disk) |
0112 DE2C 02 FCB DTYPFLS Drive 2 (FLASH Disk) |
0113 DE2D 03 FCB DTYPNET Drive 3 (NETPC Disk) |
0114 * |
0115 * RAM Disk offset |
0116 * Indexed by drive type |
0117 * |
0118 DE2E 10 DOFFTAB FCB $10 ROM Disk $10000 |
0119 DE2F 40 FCB $40 RAM DISK $40000 |
0120 DE30 FF FCB $FF Flash Disk |
0121 DE31 FF FCB $FF NETPC Disk |
0122 * |
0123 DE32 REAVEC RMB 2 Disc driver jump table. |
0124 DE34 WRIVEC RMB 2 |
0125 DE36 VERVEC RMB 2 |
0126 DE38 RSTVEC RMB 2 |
0127 DE3A DRVVEC RMB 2 |
0128 DE3C CHKVEC RMB 2 |
0129 DE3E QUIVEC RMB 2 |
0130 DE40 INIVEC RMB 2 |
0131 DE42 WARVEC RMB 2 |
0132 DE44 SEEVEC RMB 2 |
0133 * |
0134 * SECTOR BUFFER |
0135 * |
0136 DE46 BUFFER RMB 256 |
0137 DF46 SYNCREG RMB 4 Prom input register |
0138 * |
0139 **************************************** |
0140 * |
0141 * START OF EXTENSION COMMANDS |
0142 * |
0143 **************************************** |
0144 * |
0145 F000 ORG MONEXT |
0146 F000 F7 BD FDB NEXTEXT Jump to next extended command |
0147 * |
0148 * |
0149 ***************************************** |
0150 * Disk drivers * |
0151 * ------------ * |
0152 * The system dependant code for the * |
0153 * disc drivers fits here. Two tables * |
0154 * must be included. These are DTYPTAB a * |
0155 * four byte table that defines which of * |
0156 * the (up to four) following sets of * |
0157 * jump tables to use, and TABSRT the * |
0158 * jump tables themselves. For a full * |
0159 * description of the floppy drivers see * |
0160 * section 4 (pp9-14) of the general * |
0161 * Flex adaptation guide. * |
0162 ***************************************** |
0163 * |
0164 * Mass storage drivers for embedded applications. |
0165 * |
0166 * Jump tables. |
0167 F002 F1 19 TABSRT FDB EREAD Drive type 0 (ROM disk). |
0168 F004 F1 41 FDB EWRITE |
0169 F006 F1 3F FDB ECHECK |
0170 F008 F1 3F FDB ECHECK |
0171 F00A F1 3F FDB ECHECK |
0172 F00C F1 3F FDB ECHECK |
0173 F00E F1 3F FDB ECHECK |
0174 F010 F0 52 FDB DDUMMY |
0175 F012 F0 52 FDB DDUMMY |
0176 F014 F0 52 FDB DDUMMY |
0177 * |
0178 F016 F1 19 FDB EREAD Drive type 1 (RAM disk). |
0179 F018 F1 41 FDB EWRITE |
0180 F01A F1 3F FDB ECHECK |
0181 F01C F1 3F FDB ECHECK |
0182 F01E F1 3F FDB ECHECK |
0183 F020 F1 3F FDB ECHECK |
0184 F022 F1 3F FDB ECHECK |
0185 F024 F0 52 FDB DDUMMY |
0186 F026 F0 52 FDB DDUMMY |
0187 F028 F0 52 FDB DDUMMY |
0188 * |
0189 F02A F0 52 FDB DDUMMY Drive type 2 (External Flash disk). |
0190 F02C F0 52 FDB DDUMMY |
0191 F02E F0 52 FDB DDUMMY |
0192 F030 F0 52 FDB DDUMMY |
0193 F032 F0 52 FDB DDUMMY |
0194 F034 F0 52 FDB DDUMMY |
0195 F036 F0 52 FDB DDUMMY |
0196 F038 F0 52 FDB DDUMMY |
0197 F03A F0 52 FDB DDUMMY |
0198 F03C F0 52 FDB DDUMMY |
0199 * |
0200 F03E F1 7A FDB NREAD Drive type 3 (NetPC drive via serial port). |
0201 F040 F1 E9 FDB NWRITE |
0202 F042 F2 49 FDB NVERIFY |
0203 F044 F2 4E FDB NCHECK |
0204 F046 F2 4E FDB NCHECK |
0205 F048 F2 4E FDB NCHECK |
0206 F04A F2 4E FDB NCHECK |
0207 F04C F0 52 FDB DDUMMY |
0208 F04E F0 52 FDB DDUMMY |
0209 F050 F0 52 FDB DDUMMY |
0210 * |
0211 * |
0212 * Dummy routine (no errors). |
0213 F052 5F DDUMMY CLRB |
0214 F053 5D TSTB Set (z)=1 |
0215 F054 1C FE ANDCC #$FF-CFLAG Set (c)=0 |
0216 F056 39 RTS |
0217 * * |
0218 ************************** |
0219 * Main Flex entry points * |
0220 ************************* |
0221 * |
0222 * Read sector routine. |
0223 * Entry: (X) = address where sector is to be placed. |
0224 * (A) = Track number. |
0225 * (B) = Sector number. |
0226 * Exit: (B) = Error code (z)=1 if no error. |
0227 F057 6E 9F DE 32 READSC JMP [REAVEC] |
0228 * |
0229 * Write track routine. |
0230 * Entry: (X) = Address of area of memory from which the data will be taken. |
0231 * (A) = Track number. |
0232 * (B) = Sector number. |
0233 * Exit: (B) = Error condition, (Z)=1 no an error. |
0234 F05B 6E 9F DE 34 WRITSC JMP [WRIVEC] |
0235 * |
0236 * Verify sector routine. |
0237 * Entry: no parameters. |
0238 * Exit: (B) = Error condition (Z)=1 if no error. |
0239 F05F 6E 9F DE 36 BUSY JMP [VERVEC] |
0240 * |
0241 * Restore drive to track 00. |
0242 * Entry: (X) = FCB address (3,X contains drive number). |
0243 * Exit: (B) = Error condition, (Z)=1 if no error. |
0244 F063 8D 07 RESTR1 BSR DRVSEL Select drive first. |
0245 F065 27 01 BEQ RST1 |
0246 F067 39 RTS |
0247 F068 6E 9F DE 38 RST1 JMP [RSTVEC] |
0248 * |
0249 * Select current drive. |
0250 * Entry: (X) = FCB address (3,X contains drive number). |
0251 * Exit: (B) = Error condition, (Z)=0 and (c)=1 if error. |
0252 * (B) = $0F if non existant drive. |
0253 F06C 34 30 DRVSEL PSHS X,Y |
0254 F06E E6 03 LDB 3,X Get driver type. |
0255 F070 F7 DE 1E STB DRVNUM |
0256 F073 8E DE 2A LDX #DTYPTAB |
0257 F076 A6 85 LDA B,X |
0258 F078 81 FF CMPA #$FF Is the drive nonexistant? |
0259 F07A 26 08 BNE DRIVE1 |
0260 F07C 35 30 PULS X,Y |
0261 F07E C6 0F LDB #$0F |
0262 F080 5D TSTB |
0263 F081 1A 01 ORCC #$01 |
0264 F083 39 RTS |
0265 * |
0266 F084 C6 14 DRIVE1 LDB #20 Get correct table start address. |
0267 F086 3D MUL |
0268 F087 8E F0 02 LDX #TABSRT |
0269 F08A 30 8B LEAX D,X |
0270 F08C 10 8E DE 32 LDY #REAVEC Copy table into ram. |
0271 F090 C6 14 LDB #20 |
0272 F092 A6 80 DRIVE2 LDA 0,X+ |
0273 F094 A7 A0 STA 0,Y+ |
0274 F096 5A DECB |
0275 F097 26 F9 BNE DRIVE2 |
0276 F099 35 30 PULS X,Y |
0277 F09B 6E 9F DE 3A JMP [DRVVEC] |
0278 * |
0279 * Check for drive ready. |
0280 * Entry: (X) = FCB address (3,X contains drive number)> |
0281 * Exit: (B) = Error condition, (Z)=0 AND (C)=1 if drive is not ready. |
0282 F09F 6E 9F DE 3C CHKRDY JMP [CHKVEC] |
0283 * |
0284 * Quick drive ready check. |
0285 * Entry: (X) = FCB address (3,X contains drive number). |
0286 * Exit: (B) = Error condition, (Z)=0 AND (c)=1 if drive not ready. |
0287 F0A3 6E 9F DE 3E CHKQIK JMP [QUIVEC] |
0288 * |
0289 * Init (cold start). |
0290 * Entry: no parameters. |
0291 * Exit: no change. |
0292 F0A7 4F DINIT CLRA |
0293 F0A8 B7 DE 1E DINIT1 STA DRVNUM Init each valid drive in turn. |
0294 F0AB 8E DE 1B LDX #DRVNUM-3 |
0295 F0AE 8D BC BSR DRVSEL |
0296 F0B0 25 04 BCS DINIT2 |
0297 F0B2 AD 9F DE 40 JSR [INIVEC] |
0298 F0B6 B6 DE 1E DINIT2 LDA DRVNUM |
0299 F0B9 4C INCA |
0300 F0BA 81 04 CMPA #4 |
0301 F0BC 26 EA BNE DINIT1 |
0302 F0BE 39 RTS |
0303 * |
0304 * Warm start. |
0305 * Entry: no parameters. |
0306 * Exit: no change. |
0307 F0BF 6E 9F DE 42 DWARM JMP [WARVEC] |
0308 * |
0309 * Seek track. |
0310 * Entry: (A) = Track number. |
0311 * (B) = Sector number. |
0312 * Exit: (B) = Error condition, (Z)=1 if no error. |
0313 F0C3 6E 9F DE 44 SEEKTS JMP [SEEVEC] |
0314 * |
0315 * |
0316 ***************************************************** |
0317 * ROMdisk drivers * |
0318 * --------------- * |
0319 * Drivers to support a ROMdisk in the external RAM * |
0320 * of the SYS09. The ROMdisk base address is $10000 * |
0321 ***************************************************** |
0322 * Dummy return for ROM disk (write protected!) |
0323 * |
0324 * MAP RAM DISK INTO MEMORY SPACE |
0325 * |
0326 F0C7 1F A8 MAPIN TFR CC,A ; Save state of interrupt masks |
0327 F0C9 B7 DE 22 STA CCSAVE |
0328 F0CC 1A 50 ORCC #FFLAG+IFLAG ; Mask interrupts while IO mapped out |
0329 F0CE CE DE 2A LDU #DTYPTAB ; Point to Drive Type table |
0330 F0D1 F6 DE 1E LDB DRVNUM ; Get working drive number |
0331 F0D4 E6 C5 LDB B,U |
0332 F0D6 CE DE 2E LDU #DOFFTAB |
0333 F0D9 B6 DE 1F LDA TRACK |
0334 F0DC AB C5 ADDA B,U ; Add Base offset into RAM |
0335 F0DE 84 F0 ANDA #$F0 ; Mask MSN |
0336 F0E0 A7 E2 STA ,-S ; Save A on stack |
0337 * |
0338 F0E2 B6 DE 20 LDA SECTOR |
0339 F0E5 80 01 SUBA #1 ; Sectors 1 to 14 => 0 to 13 |
0340 F0E7 88 0F EORA #$0F ; Complement LSNybble |
0341 F0E9 84 0F ANDA #$0F |
0342 * |
0343 F0EB AB E0 ADDA ,S+ ; Add sector to LSN of Track and pop |
0344 F0ED B7 FF F0 STA DATREG+MAPPAG |
0345 * |
0346 F0F0 B6 DE 1F LDA TRACK ; LSN of Track indexes into 4K page |
0347 F0F3 84 0F ANDA #$0F |
0348 F0F5 8B 00 ADDA #MAPPAG*16 |
0349 F0F7 5F CLRB |
0350 F0F8 1F 03 TFR D,U |
0351 F0FA 39 RTS |
0352 * |
0353 * MAP RAM DISK OUT OF MEMORY |
0354 * |
0355 F0FB 86 00 MAPOUT LDA #MAPPAG ; Point to the Flex page |
0356 F0FD 88 0F EORA #$0F ; Complement LSNybble |
0357 F0FF B7 FF F0 STA DATREG+MAPPAG ; map in Flex page |
0358 F102 B6 DE 22 LDA CCSAVE ; restore interrupt masks |
0359 F105 1F 8A TFR A,CC |
0360 F107 39 RTS |
0361 * |
0362 * Seek track and sector |
0363 * A holds track number (0-32) |
0364 * B holds sector number (1-14) |
0365 * |
0366 F108 B7 DE 1F ESEEK STA TRACK |
0367 F10B F7 DE 20 STB SECTOR |
0368 F10E 1C FE ANDCC #$FE ; CLEAR CARRY |
0369 F110 1A 04 ORCC #$04 ; SET Z |
0370 F112 39 RTS |
0371 * |
0372 * MARK DISK READ ONLY |
0373 * |
0374 F113 C6 40 EDUMMY LDB #$40 |
0375 F115 5D TSTB |
0376 F116 1A 01 ORCC #$01 |
0377 F118 39 RTS |
0378 * |
0379 F119 34 70 EREAD PSHS X,Y,U push sequentialy to preserve order on stack |
0380 F11B 17 FF EA LBSR ESEEK |
0381 F11E 17 FF A6 LBSR MAPIN build external ram address |
0382 * |
0383 F121 10 8E DE 46 LDY #BUFFER |
0384 F125 5F CLRB |
0385 F126 A6 C0 ERLOOP1 LDA 0,U+ move 256 bytes to buffer from external RAM |
0386 F128 A7 A0 STA 0,Y+ |
0387 F12A 5A DECB |
0388 F12B 26 F9 BNE ERLOOP1 |
0389 * |
0390 F12D 17 FF CB LBSR MAPOUT |
0391 * |
0392 F130 10 8E DE 46 LDY #BUFFER |
0393 F134 5F CLRB |
0394 F135 A6 A0 ERLOOP2 LDA 0,Y+ move 256 bytes from buffer to Flex RAM |
0395 F137 A7 80 STA 0,X+ |
0396 F139 5A DECB |
0397 F13A 26 F9 BNE ERLOOP2 |
0398 * |
0399 F13C 5F CLRB |
0400 F13D 35 F0 PULS X,Y,U,PC restore all registers |
0401 * |
0402 * check for marker bytes $AA55 in first bytes of first track/sector |
0403 * |
0404 *ECHECK CLRA |
0405 * LDB #1 |
0406 * LDX #BUFFER |
0407 * BSR EREAD |
0408 * LDD BUFFER |
0409 * CMPD #$AA55 |
0410 * BNE EERR |
0411 * LBRA DDUMMY |
0412 *EERR LDB #$80 not ready bit set |
0413 * TSTB |
0414 * ORCC #$01 |
0415 * RTS |
0416 F13F 5F ECHECK CLRB |
0417 F140 39 RTS |
0418 * |
0419 * Write Sector |
0420 * |
0421 F141 34 70 EWRITE PSHS X,Y,U |
0422 F143 17 FF C2 LBSR ESEEK |
0423 F146 CE DE 2A LDU #DTYPTAB ; Point to Drive Type table |
0424 F149 F6 DE 1E LDB DRVNUM ; Get working drive number |
0425 F14C E6 C5 LDB B,U ; Fetch Drive type |
0426 F14E C1 01 CMPB #DTYPRAM ; Is it a RAM Disk ? |
0427 F150 27 07 BEQ EWOK ; Yep, can write to it |
0428 F152 C1 00 CMPB #DTYPROM ; Allow writes to ROM Disk too |
0429 F154 27 03 BEQ EWOK |
0430 F156 16 FF BA LBRA EDUMMY ; Nope report read only |
0431 * |
0432 F159 10 8E DE 46 EWOK LDY #BUFFER |
0433 F15D 5F CLRB |
0434 F15E A6 80 EWLOOP1 LDA 0,X+ move 256 bytes to buffer from Flex RAM |
0435 F160 A7 A0 STA 0,Y+ |
0436 F162 5A DECB |
0437 F163 26 F9 BNE EWLOOP1 |
0438 * |
0439 F165 17 FF 5F LBSR MAPIN |
0440 * |
0441 F168 10 8E DE 46 LDY #BUFFER |
0442 F16C 5F CLRB |
0443 F16D A6 A0 EWLOOP2 LDA 0,Y+ move 256 bytes from buffer to external RAM |
0444 F16F A7 C0 STA 0,U+ |
0445 F171 5A DECB |
0446 F172 26 F9 BNE EWLOOP2 |
0447 * |
0448 F174 17 FF 84 LBSR MAPOUT |
0449 * |
0450 F177 5F CLRB |
0451 F178 35 F0 PULS X,Y,U,PC |
0452 * |
0453 * |
0454 ***************************************************** |
0455 * FlexNet drivers * |
0456 * --------------- * |
0457 * Drivers to support a remote connection via the * |
0458 * serial port using the FlexNet protocol as defined * |
0459 * in FLEXNet_421B * |
0460 ***************************************************** |
0461 * |
0462 * |
0463 * read sector from remote drive |
0464 * |
0465 F17A 34 04 NREAD PSHS B |
0466 F17C 34 02 PSHS A |
0467 F17E 7F DE 21 CLR CHKSUM clear checksum |
0468 F181 7F DE 22 CLR CHKSUM+1 |
0469 * |
0470 F184 86 73 LDA #'s Send read sector command |
0471 F186 BD F2 85 JSR SCHAR |
0472 F189 24 4C BCC NRD_DNR if timeout, then flag drive not ready |
0473 * |
0474 F18B B6 DE 1E LDA DRVNUM send drive |
0475 F18E BD F2 85 JSR SCHAR |
0476 F191 24 44 BCC NRD_DNR |
0477 * |
0478 F193 35 02 PULS A send track |
0479 F195 BD F2 85 JSR SCHAR |
0480 F198 24 3D BCC NRD_DNR |
0481 * |
0482 F19A 35 02 PULS A send sector |
0483 F19C BD F2 85 JSR SCHAR |
0484 F19F 24 36 BCC NRD_DNR |
0485 * |
0486 * transfer 256 bytes |
0487 F1A1 5F CLRB |
0488 F1A2 BD F2 67 NREAD1 JSR RCHAR read byte |
0489 F1A5 24 30 BCC NRD_DNR if timeout, then flag drive not ready |
0490 F1A7 A7 80 STA 0,X+ |
0491 F1A9 BB DE 22 ADDA CHKSUM+1 update checksum |
0492 F1AC B7 DE 22 STA CHKSUM+1 |
0493 F1AF 24 03 BCC NREAD2 |
0494 F1B1 7C DE 21 INC CHKSUM |
0495 F1B4 5A NREAD2 DECB |
0496 F1B5 26 EB BNE NREAD1 |
0497 * |
0498 * compare checksums |
0499 F1B7 BD F2 67 JSR RCHAR get checksum msb |
0500 F1BA 24 1B BCC NRD_DNR |
0501 F1BC 34 02 PSHS A |
0502 F1BE BD F2 67 JSR RCHAR get checksum lsb |
0503 F1C1 24 14 BCC NRD_DNR |
0504 F1C3 1F 89 TFR A,B |
0505 F1C5 35 02 PULS A |
0506 F1C7 10 B3 DE 21 CMPD CHKSUM compare checksums |
0507 F1CB 26 0E BNE NRD_ERR if checksum error, then flag crc read error |
0508 * |
0509 F1CD 86 06 LDA #ACK no checksum error, send ACK char |
0510 F1CF BD F2 85 JSR SCHAR |
0511 F1D2 24 03 BCC NRD_DNR |
0512 F1D4 5F CLRB all OK, flag no error |
0513 F1D5 20 0D BRA NRD_END |
0514 * |
0515 F1D7 C6 10 NRD_DNR LDB #16 flag drive not ready |
0516 F1D9 20 09 BRA NRD_END |
0517 * |
0518 F1DB 86 15 NRD_ERR LDA #NAK send NAK |
0519 F1DD BD F2 85 JSR SCHAR |
0520 F1E0 24 F5 BCC NRD_DNR |
0521 F1E2 C6 09 LDB #09 flag crc read error |
0522 * |
0523 F1E4 F7 DE 21 NRD_END STB CHKSUM used by VERIFY |
0524 F1E7 5D TSTB |
0525 F1E8 39 RTS |
0526 * |
0527 * |
0528 * write sector to remote drive |
0529 * |
0530 F1E9 34 04 NWRITE PSHS B |
0531 F1EB 34 02 PSHS A |
0532 F1ED 7F DE 21 CLR CHKSUM clear checksum |
0533 F1F0 7F DE 22 CLR CHKSUM+1 |
0534 * |
0535 F1F3 86 72 LDA #'r Send write sector command |
0536 F1F5 BD F2 85 JSR SCHAR |
0537 F1F8 24 DD BCC NRD_DNR if timeout, then flag drive not ready |
0538 * |
0539 F1FA B6 DE 1E LDA DRVNUM send drive |
0540 F1FD BD F2 85 JSR SCHAR |
0541 F200 24 D5 BCC NRD_DNR |
0542 * |
0543 F202 35 02 PULS A send track |
0544 F204 BD F2 85 JSR SCHAR |
0545 F207 24 CE BCC NRD_DNR |
0546 * |
0547 F209 35 02 PULS A send sector |
0548 F20B BD F2 85 JSR SCHAR |
0549 F20E 24 C7 BCC NRD_DNR |
0550 * |
0551 * transfer 256 bytes |
0552 F210 5F CLRB |
0553 F211 A6 80 NWRITE1 LDA 0,X+ |
0554 F213 BD F2 85 JSR SCHAR write byte |
0555 F216 24 BF BCC NRD_DNR if timeout, then flag drive not ready |
0556 F218 BB DE 22 ADDA CHKSUM+1 update checksum |
0557 F21B B7 DE 22 STA CHKSUM+1 |
0558 F21E 24 03 BCC NWRITE2 |
0559 F220 7C DE 21 INC CHKSUM |
0560 F223 5A NWRITE2 DECB |
0561 F224 26 EB BNE NWRITE1 |
0562 * |
0563 * compare checksums |
0564 F226 B6 DE 21 LDA CHKSUM |
0565 F229 BD F2 85 JSR SCHAR send checksum msb |
0566 F22C 24 A9 BCC NRD_DNR |
0567 F22E B6 DE 22 LDA CHKSUM+1 |
0568 F231 BD F2 85 JSR SCHAR send checksum lsb |
0569 F234 24 A1 BCC NRD_DNR |
0570 * |
0571 F236 BD F2 67 JSR RCHAR get checksum response |
0572 F239 24 9C BCC NRD_DNR |
0573 F23B 81 06 CMPA #ACK |
0574 F23D 26 03 BNE NWR_ERR if checksum error, then flag write error |
0575 * |
0576 F23F 5F CLRB all OK, flag no error |
0577 F240 20 02 BRA NWR_END |
0578 * |
0579 F242 C6 0A NWR_ERR LDB #10 flag write error |
0580 * |
0581 F244 F7 DE 21 NWR_END STB CHKSUM used by VERIFY |
0582 F247 5D TSTB |
0583 F248 39 RTS |
0584 * |
0585 * |
0586 * verify last sector written to remote drive |
0587 * |
0588 F249 F6 DE 21 NVERIFY LDB CHKSUM test last checksum |
0589 F24C 5D TSTB |
0590 F24D 39 RTS |
0591 * |
0592 * |
0593 * quck check and check drive ready |
0594 * |
0595 F24E 86 51 NCHECK LDA #'Q quick check command |
0596 F250 BD F2 85 JSR SCHAR |
0597 F253 24 0C BCC NCK_ERR if timeout, then flag drive not ready |
0598 |
0599 F255 BD F2 67 JSR RCHAR get response from host |
0600 F258 24 07 BCC NCK_ERR |
0601 F25A 81 06 CMPA #ACK |
0602 F25C 26 03 BNE NCK_ERR if NAK, then flag drive not ready |
0603 |
0604 F25E 5F CLRB all OK, flag drive ready |
0605 F25F 20 04 BRA NCK_END |
0606 * |
0607 F261 C6 10 NCK_ERR LDB #16 report drive not ready |
0608 F263 1A 01 ORCC #$01 check needs carry set as well |
0609 * |
0610 F265 5D NCK_END TSTB |
0611 F266 39 RTS |
0612 * |
0613 * |
0614 * recieve char from remote drive. |
0615 * timeout if no response for approx 1s. |
0616 * Entry: no parameters |
0617 * Exit: (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout. |
0618 * |
0619 F267 34 30 RCHAR PSHS X,Y |
0620 * |
0621 F269 8E 03 E8 LDX #1000 1000x inner loop |
0622 F26C 10 8E 04 E2 RCHAR1 LDY #DELCON delay constant for inner loop (approx 1ms). |
0623 F270 B6 E0 00 RCHAR2 LDA ACIAC1 test for recieved char |
0624 F273 47 ASRA |
0625 F274 25 0A BCS RCHAR3 get character |
0626 F276 31 3F LEAY -1,Y else, continue to count delay |
0627 F278 26 F6 BNE RCHAR2 |
0628 F27A 30 1F LEAX -1,X |
0629 F27C 26 EE BNE RCHAR1 |
0630 F27E 35 B0 PULS X,Y,PC return with error if timed out |
0631 * |
0632 F280 B6 E0 01 RCHAR3 LDA ACIAD1 return data (carry bit still set) |
0633 F283 35 B0 PULS X,Y,PC |
0634 * |
0635 * |
0636 * transmit char to remote drive. |
0637 * timeout if no response for approx 1s. (allows for use of hardware flow control) |
0638 * Entry: (A) = char to transmit |
0639 * Exit: (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout. |
0640 * |
0641 F285 34 30 SCHAR PSHS X,Y |
0642 F287 34 02 PSHS A |
0643 * |
0644 F289 8E 03 E8 LDX #1000 1000x inner loop |
0645 F28C 10 8E 04 E2 SCHAR1 LDY #DELCON delay constant for inner loop (approx 1ms). |
0646 F290 B6 E0 00 SCHAR2 LDA ACIAC1 test for space in transmit FIFO |
0647 F293 47 ASRA |
0648 F294 47 ASRA |
0649 F295 25 0C BCS SCHAR3 send character |
0650 F297 31 3F LEAY -1,Y else, continue to count delay |
0651 F299 26 F5 BNE SCHAR2 |
0652 F29B 30 1F LEAX -1,X |
0653 F29D 26 ED BNE SCHAR1 |
0654 F29F 35 02 PULS A |
0655 F2A1 35 B0 PULS X,Y,PC return with error if timed out |
0656 * |
0657 F2A3 35 02 SCHAR3 PULS A |
0658 F2A5 B7 E0 01 STA ACIAD1 send data (carry bit still set) |
0659 F2A8 35 B0 PULS X,Y,PC |
0660 * |
0661 ** 'UF' Format RAMdisc to FLEX standard. |
0662 * |
0663 F2AA 0A 0D DISFOS FCB $0A,$0D |
0664 F2AC 46 6F 72 6D 61 74 FCC 'Formating RAMdisk... ' |
69 6E 67 20 52 41 |
4D 64 69 73 6B 2E |
2E 2E 20 |
0665 F2C1 04 FCB 4 |
0666 F2C2 0A 0D 04 MESS6 FCB $0A,$0D,4 |
0667 F2C5 52 61 6D 64 69 73 FCC 'Ramdisk not allocated! ' |
6B 20 6E 6F 74 20 |
61 6C 6C 6F 63 61 |
74 65 64 21 20 |
0668 F2DC 04 FCB 4 |
0669 * |
0670 F2DD 8E F2 AA UFSUB LDX #DISFOS |
0671 F2E0 BD F4 6A JSR PDATA1 |
0672 F2E3 8E DE 2A LDX #DTYPTAB search for allocated ramdisk |
0673 F2E6 5F CLRB |
0674 F2E7 A6 85 FMT9 LDA B,X |
0675 F2E9 81 01 CMPA #DTYPRAM driver type 1 is ramdisk |
0676 F2EB 27 0C BEQ FFOUND |
0677 F2ED 5C INCB |
0678 F2EE C1 04 CMPB #4 end of table? then not allocated. |
0679 F2F0 26 F5 BNE FMT9 |
0680 F2F2 8E F2 C2 LDX #MESS6 |
0681 F2F5 BD F4 6A JSR PDATA1 |
0682 F2F8 39 RTS |
0683 * |
0684 F2F9 F7 DE 1E FFOUND STB DRVNUM |
0685 F2FC 8E DE 1B LDX #DRVNUM-3 |
0686 F2FF BD F0 6C JSR DRVSEL |
0687 * |
0688 * set up free chain |
0689 * |
0690 F302 8E DE 46 LDX #BUFFER clear out buffer |
0691 F305 4F CLRA |
0692 F306 5F CLRB |
0693 F307 A7 80 DFL1 STA 0,X+ |
0694 F309 5A DECB |
0695 F30A 26 FB BNE DFL1 |
0696 * |
0697 F30C 7F DE 1F CLR TRACK |
0698 F30F 86 01 LDA #1 |
0699 F311 B7 DE 20 STA SECTOR |
0700 F314 8E DE 46 DFL2 LDX #BUFFER |
0701 F317 B6 DE 1F LDA TRACK |
0702 F31A A7 84 STA 0,X |
0703 F31C B6 DE 20 LDA SECTOR |
0704 F31F 4C INCA |
0705 F320 81 0F CMPA #RMAXSEC+1 last sector on track? |
0706 F322 26 04 BNE DFL3 |
0707 F324 6C 84 INC 0,X |
0708 F326 86 01 LDA #1 |
0709 F328 A7 01 DFL3 STA 1,X |
0710 F32A B6 DE 1F LDA TRACK |
0711 F32D F6 DE 20 LDB SECTOR |
0712 F330 BD F0 5B JSR WRITSC |
0713 F333 7C DE 20 INC SECTOR |
0714 F336 B6 DE 20 LDA SECTOR |
0715 F339 81 0F CMPA #RMAXSEC+1 |
0716 F33B 26 D7 BNE DFL2 |
0717 F33D 86 01 LDA #1 |
0718 F33F B7 DE 20 STA SECTOR |
0719 F342 7C DE 1F INC TRACK |
0720 F345 B6 DE 1F LDA TRACK |
0721 F348 81 40 CMPA #RMAXTRK |
0722 F34A 26 C8 BNE DFL2 |
0723 * break free chain at last track/sector |
0724 F34C 8E DE 46 LDX #BUFFER |
0725 F34F 86 3F LDA #RMAXTRK-1 |
0726 F351 C6 0E LDB #RMAXSEC |
0727 F353 BD F0 57 JSR READSC |
0728 F356 8E DE 46 LDX #BUFFER |
0729 F359 6F 84 CLR 0,X |
0730 F35B 6F 01 CLR 1,X |
0731 F35D 86 3F LDA #RMAXTRK-1 |
0732 F35F C6 0E LDB #RMAXSEC |
0733 F361 BD F0 5B JSR WRITSC |
0734 * set up sector structure, SIR, directory etc |
0735 F364 8E DE 46 LDX #BUFFER |
0736 F367 4F CLRA |
0737 F368 C6 0E LDB #RMAXSEC |
0738 F36A BD F0 57 JSR READSC |
0739 F36D 8E DE 46 LDX #BUFFER |
0740 F370 6F 84 CLR 0,X break end of directory chain |
0741 F372 6F 01 CLR 1,X |
0742 F374 4F CLRA |
0743 F375 C6 0E LDB #RMAXSEC |
0744 F377 BD F0 5B JSR WRITSC |
0745 * |
0746 F37A 8E DE 46 LDX #BUFFER |
0747 F37D 4F CLRA |
0748 F37E C6 03 LDB #3 set up SIR |
0749 F380 BD F0 57 JSR READSC |
0750 F383 8E DE 46 LDX #BUFFER |
0751 F386 6F 84 CLR 0,X break forward link |
0752 F388 6F 01 CLR 1,X |
0753 F38A CC 52 41 LDD #$5241 set volume name (RAMDISK ) |
0754 F38D ED 88 10 STD 16,X |
0755 F390 CC 4D 44 LDD #$4D44 |
0756 F393 ED 88 12 STD 18,X |
0757 F396 CC 49 53 LDD #$4953 |
0758 F399 ED 88 14 STD 20,X |
0759 F39C CC 4B 20 LDD #$4B20 |
0760 F39F ED 88 16 STD 22,X |
0761 F3A2 CC 00 01 LDD #1 volume number |
0762 F3A5 ED 88 1B STD 27,X |
0763 F3A8 CC 01 01 LDD #$0101 first trk/sec 01-01 |
0764 F3AB ED 88 1D STD 29,X |
0765 F3AE 86 3F LDA #RMAXTRK-1 |
0766 F3B0 C6 0E LDB #RMAXSEC |
0767 F3B2 ED 88 1F STD 31,X |
0768 F3B5 ED 88 26 STD 38,X |
0769 F3B8 CC 03 72 LDD #RTOTSEC total DATA sectors (2912-14) |
0770 F3BB ED 88 21 STD 33,X |
0771 * |
0772 F3BE 86 01 LDA #01 month set default creation date (SYS09's birthday!) |
0773 F3C0 A7 88 23 STA 35,X |
0774 F3C3 86 07 LDA #07 day |
0775 F3C5 A7 88 24 STA 36,X |
0776 F3C8 86 07 LDA #07 year |
0777 F3CA A7 88 25 STA 37,X |
0778 * |
0779 F3CD 4F RF3 CLRA |
0780 F3CE C6 03 LDB #3 |
0781 F3D0 BD F0 5B JSR WRITSC |
0782 * |
0783 F3D3 8E DE 46 LDX #BUFFER |
0784 F3D6 4F CLRA |
0785 F3D7 C6 01 LDB #1 |
0786 F3D9 BD F0 57 JSR READSC |
0787 F3DC 8E DE 46 LDX #BUFFER |
0788 F3DF 86 AA LDA #$AA set the init flag |
0789 F3E1 A7 84 STA 0,X |
0790 F3E3 86 55 LDA #$55 |
0791 F3E5 A7 01 STA 1,X |
0792 F3E7 4F CLRA |
0793 F3E8 C6 01 LDB #1 |
0794 F3EA 7E F0 5B JMP WRITSC |
0795 * |
0796 ******************************** |
0797 * System specific Boot * |
0798 * command goes here. * |
0799 ******************************** |
0800 * |
0801 * Boot FLEX from the FPGA's internal pre-loaded scratch RAM |
0802 * |
0803 F3ED 08 08 UBMESS FCB $08, $08 |
0804 F3EF 42 6F 6F 74 69 6E FCC 'Booting internal FLEX....' |
67 20 69 6E 74 65 |
72 6E 61 6C 20 46 |
4C 45 58 2E 2E 2E |
2E |
0805 F408 0D 0A 04 FCB $0D,$0A,$04 |
0806 * |
0807 F40B 8E F3 ED UBSUB LDX #UBMESS |
0808 F40E BD F4 6A JSR PDATA1 |
0809 * |
0810 F411 8E D3 E5 LDX #$D3E5 |
0811 F414 10 8E F4 34 LDY #CONTAB Overlay console driver table |
0812 F418 EC A1 UB1 LDD 0,Y++ |
0813 F41A ED 81 STD 0,X++ |
0814 F41C 8C D3 FD CMPX #$D3FD |
0815 F41F 26 F7 BNE UB1 |
0816 * |
0817 F421 8E DE 00 LDX #$DE00 Overlay disk driver table |
0818 F424 10 8E F4 4C LDY #DISTAB |
0819 F428 EC A1 UB2 LDD 0,Y++ |
0820 F42A ED 81 STD 0,X++ |
0821 F42C 8C DE 1E CMPX #$DE1E |
0822 F42F 26 F7 BNE UB2 |
0823 * |
0824 F431 7E CD 00 UBEND JMP $CD00 |
0825 * |
0826 * FLEX console jump table. |
0827 F434 F4 76 CONTAB FDB INPNE INPUT NO ECHO |
0828 F436 F4 82 FDB DUMMY INTERRUPT HANDLER |
0829 F438 DF C2 FDB MONRAM+$02 SWI VECTOR |
0830 F43A DF C8 FDB MONRAM+$08 IRQ VECTOR |
0831 F43C F4 82 FDB DUMMY TIMER OFF |
0832 F43E F4 82 FDB DUMMY TIMER ON |
0833 F440 F4 82 FDB DUMMY TIMER INITIALIZATION |
0834 F442 F4 7E FDB CONTRL MONITOR |
0835 F444 F4 82 FDB DUMMY TERMINAL INITIALIZATION |
0836 F446 F4 7A FDB STATUS INPUT CHECK |
0837 F448 F4 6E FDB OUTP TERMINAL OUTPUT |
0838 F44A F4 72 FDB INPE TERMINAL INPUT WITH ECHO |
0839 * |
0840 * FLEX disk jump table. |
0841 F44C 7E F0 57 DISTAB JMP READSC |
0842 F44F 7E F0 5B JMP WRITSC |
0843 F452 7E F0 5F JMP BUSY |
0844 F455 7E F0 63 JMP RESTR1 |
0845 F458 7E F0 6C JMP DRVSEL |
0846 F45B 7E F0 9F JMP CHKRDY |
0847 F45E 7E F0 A3 JMP CHKQIK |
0848 F461 7E F0 A7 JMP DINIT |
0849 F464 7E F0 BF JMP DWARM |
0850 F467 7E F0 C3 JMP SEEKTS |
0851 * |
0852 * Monitor jumps |
0853 * |
0854 F46A 6E 9F F8 0C PDATA1 JMP [PDATAV] |
0855 F46E 6E 9F F8 0A OUTP JMP [OUTCHV] |
0856 F472 6E 9F F8 06 INPE JMP [INCHEV] |
0857 F476 6E 9F F8 04 INPNE JMP [INCHV] |
0858 F47A 6E 9F F8 08 STATUS JMP [INCHKV] |
0859 F47E 6E 9F F8 00 CONTRL JMP [MONITV] |
0860 F482 39 DUMMY RTS |
0861 * |
0862 ** 'UL' LOAD ROM DISK VIA SERIAL PORT |
0863 * |
0864 F483 53 65 72 69 61 6C ULMES FCC 'Serial ROM Disk upload ...' |
20 52 4F 4D 20 44 |
69 73 6B 20 75 70 |
6C 6F 61 64 20 2E |
2E 2E |
0865 F49D 0D 0A 04 FCB $0D,$0A,$04 |
0866 F4A0 52 4F 4D 20 44 69 ULMES1 FCC 'ROM Disk Loaded' |
73 6B 20 4C 6F 61 |
64 65 64 |
0867 F4AF 0D 0A 04 FCB $0D,$0A,$04 |
0868 * |
0869 F4B2 8E F4 83 ULSUB LDX #ULMES |
0870 F4B5 BD F4 6A JSR PDATA1 |
0871 * |
0872 F4B8 86 00 LDA #$00 |
0873 F4BA B7 DE 1E STA DRVNUM |
0874 F4BD 4F CLRA TRACK 0 |
0875 F4BE C6 01 LDB #$01 SECTOR 1 |
0876 F4C0 B7 DE 1F ULLOOP0 STA TRACK |
0877 F4C3 F7 DE 20 STB SECTOR` |
0878 F4C6 17 FB FE LBSR MAPIN |
0879 * |
0880 F4C9 5F CLRB xfer 256 bytes at a time. |
0881 F4CA BD F4 ED ULLOOP1 JSR LRBYTE transfer should be hex bytes |
0882 F4CD A7 C0 STA ,U+ |
0883 F4CF 5A DECB |
0884 F4D0 26 F8 BNE ULLOOP1 |
0885 * |
0886 F4D2 17 FC 26 LBSR MAPOUT |
0887 * |
0888 F4D5 B6 DE 1F LDA TRACK |
0889 F4D8 F6 DE 20 LDB SECTOR |
0890 F4DB 5C INCB |
0891 F4DC C1 0F CMPB #EMAXSEC+1 |
0892 F4DE 26 E0 BNE ULLOOP0 |
0893 F4E0 C6 01 LDB #1 |
0894 F4E2 4C INCA |
0895 F4E3 81 30 CMPA #EMAXTRK |
0896 F4E5 26 D9 BNE ULLOOP0 |
0897 * |
0898 F4E7 8E F4 A0 ULEXIT LDX #ULMES1 |
0899 F4EA 7E F4 6A JMP PDATA1 |
0900 * |
0901 * Read a byte from the serial port |
0902 * |
0903 F4ED 34 04 LRBYTE PSHS B |
0904 F4EF 8D 0E BSR LRHEX Get hex digit. |
0905 F4F1 48 ASLA |
0906 F4F2 48 ASLA Shift to msb. |
0907 F4F3 48 ASLA |
0908 F4F4 48 ASLA |
0909 F4F5 1F 89 TFR A,B Save in B. |
0910 F4F7 8D 06 BSR LRHEX Get next digit. |
0911 F4F9 34 04 PSHS B |
0912 F4FB AB E0 ADDA 0,S+ Add together bytes. |
0913 F4FD 35 84 PULS B,PC |
0914 * |
0915 F4FF BD F5 28 LRHEX JSR INTER |
0916 F502 29 FB BVS LRHEX |
0917 F504 80 30 SUBA #$30 Remove ascii bias. |
0918 F506 2B F7 BMI LRHEX |
0919 F508 81 09 CMPA #$09 Number? |
0920 F50A 2F 0A BLE LRHEX1 Yes. |
0921 F50C 81 11 CMPA #$11 Keep testing. |
0922 F50E 2B EF BMI LRHEX |
0923 F510 81 16 CMPA #$16 |
0924 F512 2E EB BGT LRHEX |
0925 F514 80 07 SUBA #$07 |
0926 F516 39 LRHEX1 RTS |
0927 * |
0928 * ACIA INPUT TEST |
0929 * |
0930 F517 B6 E0 00 INTEST LDA ACIAC1 |
0931 F51A 85 01 BITA #$01 |
0932 F51C 39 RTS |
0933 * |
0934 * RESET ACIA |
0935 * |
0936 F51D 86 03 ACIRST LDA #$03 master reset |
0937 F51F B7 E0 00 STA ACIAC1 |
0938 F522 86 11 LDA #$11 |
0939 F524 B7 E0 00 STA ACIAC1 |
0940 F527 39 RTS |
0941 * |
0942 * ACIA INPUT |
0943 * |
0944 F528 86 10 INTER LDA #16 |
0945 F52A B7 DE 27 STA DELCNT+0 |
0946 F52D 7F DE 28 CLR DELCNT+1 |
0947 F530 7F DE 29 CLR DELCNT+2 |
0948 F533 B6 E0 00 INTER0 LDA ACIAC1 |
0949 F536 85 01 BITA #$01 |
0950 F538 26 08 BNE INTER1 |
0951 F53A 85 78 BITA #$78 |
0952 F53C 27 0A BEQ INTER2 |
0953 F53E 8D DD BSR ACIRST |
0954 F540 20 E6 BRA INTER |
0955 * |
0956 F542 B6 E0 01 INTER1 LDA ACIAD1 |
0957 F545 1C 02 ANDCC #VFLAG |
0958 F547 39 RTS |
0959 * |
0960 F548 7A DE 29 INTER2 DEC DELCNT+2 |
0961 F54B 26 E6 BNE INTER0 |
0962 F54D 7A DE 28 DEC DELCNT+1 |
0963 F550 26 E1 BNE INTER0 |
0964 F552 7A DE 27 DEC DELCNT+0 |
0965 F555 26 DC BNE INTER0 |
0966 F557 4F CLRA |
0967 F558 1A 02 ORCC #VFLAG |
0968 F55A 39 RTS |
0969 * |
0970 * ACIA OUTPUT |
0971 * |
0972 F55B 34 02 OUTTER PSHS A |
0973 * |
0974 F55D B6 E0 00 OUTTE1 LDA ACIAC1 |
0975 F560 85 02 BITA #$02 |
0976 F562 26 08 BNE OUTTE2 |
0977 F564 85 78 BITA #$78 |
0978 F566 27 F5 BEQ OUTTE1 |
0979 F568 8D B3 BSR ACIRST |
0980 F56A 20 F1 BRA OUTTE1 |
0981 * |
0982 F56C 35 02 OUTTE2 PULS A |
0983 F56E B7 E0 01 STA ACIAD1 |
0984 F571 39 RTS |
0985 * |
0986 ** 'UX' Xmodem ROM Disk upload |
0987 * |
0988 F572 0D 0A UXMES FCB $0D,$0A |
0989 F574 58 6D 6F 64 65 6D FCC 'Xmodem ROM Disk Upload' |
20 52 4F 4D 20 44 |
69 73 6B 20 55 70 |
6C 6F 61 64 |
0990 F58A 04 FCB 4 |
0991 F58B 0D 0A UXMES1 FCB $0D,$0A |
0992 F58D 55 70 6C 6F 61 64 FCC 'Upload Complete' |
20 43 6F 6D 70 6C |
65 74 65 |
0993 F59C 04 FCB 4 |
0994 F59D 0D 0A UXMES2 FCB $0D,$0A |
0995 F59F 55 70 6C 6F 61 64 FCC 'Upload Error' |
20 45 72 72 6F 72 |
0996 F5AB 04 FCB 4 |
0997 * |
0998 F5AC 8E F5 72 UXSUB LDX #UXMES |
0999 F5AF 17 FE B8 LBSR PDATA1 |
1000 * |
1001 F5B2 86 01 LDA #1 |
1002 F5B4 B7 DE 23 STA BLKNUM |
1003 F5B7 8E F6 1A LDX #XSTSTR |
1004 F5BA BF DE 25 STX XSTATE |
1005 * |
1006 F5BD 86 00 LDA #$00 |
1007 F5BF B7 DE 1E STA DRVNUM |
1008 F5C2 4F CLRA TRACK 0 |
1009 F5C3 C6 01 LDB #$01 SECTOR 1 |
1010 F5C5 B7 DE 1F UXLOOP0 STA TRACK |
1011 F5C8 F7 DE 20 STB SECTOR |
1012 F5CB 17 FA F9 LBSR MAPIN |
1013 * |
1014 F5CE 5F CLRB xfer 256 bytes at a time. |
1015 F5CF 17 00 2B UXLOOP1 LBSR XBYTE transfer should be hex bytes |
1016 F5D2 25 20 BCS UXERR |
1017 F5D4 A7 C0 STA ,U+ |
1018 F5D6 5A DECB |
1019 F5D7 26 F6 BNE UXLOOP1 |
1020 * |
1021 F5D9 17 FB 1F LBSR MAPOUT |
1022 * |
1023 F5DC B6 DE 1F LDA TRACK |
1024 F5DF F6 DE 20 LDB SECTOR |
1025 F5E2 5C INCB |
1026 F5E3 C1 0F CMPB #EMAXSEC+1 |
1027 F5E5 26 DE BNE UXLOOP0 |
1028 F5E7 C6 01 LDB #1 |
1029 F5E9 4C INCA |
1030 F5EA 81 30 CMPA #EMAXTRK |
1031 F5EC 26 D7 BNE UXLOOP0 |
1032 * |
1033 F5EE 8E F5 8B UXEXIT LDX #UXMES1 |
1034 F5F1 7E F4 6A JMP PDATA1 |
1035 * |
1036 F5F4 17 FB 04 UXERR LBSR MAPOUT |
1037 F5F7 8E F5 9D LDX #UXMES2 |
1038 F5FA 16 FE 6D LBRA PDATA1 |
1039 * |
1040 * Get a Byte using XModem protocol |
1041 * Carry clear => no errors |
1042 * Carry set => errors |
1043 * |
1044 F5FD 34 10 XBYTE PSHS X |
1045 F5FF BE DE 25 LDX XSTATE |
1046 * |
1047 F602 17 FF 23 XBYTE0 LBSR INTER |
1048 F605 28 0A BVC XBYTE1 |
1049 F607 86 15 LDA #NAK |
1050 F609 17 FF 4F LBSR OUTTER |
1051 F60C 8E F6 1A LDX #XSTSTR |
1052 F60F 20 F1 BRA XBYTE0 |
1053 * |
1054 F611 AD 84 XBYTE1 JSR ,X |
1055 F613 26 ED BNE XBYTE0 |
1056 F615 BF DE 25 STX XSTATE |
1057 F618 35 90 PULS X,PC |
1058 * |
1059 * START - LOOK FOR SOH (START OF HEADER) = $01 |
1060 * |
1061 F61A 81 01 XSTSTR CMPA #SOH |
1062 F61C 26 06 BNE XSTSTR1 |
1063 F61E 8E F6 3A LDX #XSTBLK |
1064 F621 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit) |
1065 F623 39 RTS |
1066 * |
1067 F624 81 04 XSTSTR1 CMPA #EOT |
1068 F626 26 08 BNE XSTSTR2 |
1069 F628 86 06 LDA #ACK |
1070 F62A 17 FF 2E LBSR OUTTER |
1071 F62D 1A 05 ORCC #CFLAG+ZFLAG Set (c)=1 abort & exit |
1072 F62F 39 RTS |
1073 * |
1074 F630 81 18 XSTSTR2 CMPA #CAN |
1075 F632 26 03 BNE XSTSTR3 |
1076 F634 1A 05 ORCC #CFLAG+ZFLAG Set (c)=1 abort & exit |
1077 F636 39 RTS |
1078 * |
1079 F637 1C FA XSTSTR3 ANDCC #$FF-CFLAG-ZFLAG |
1080 F639 39 RTS |
1081 * |
1082 * Got SOH |
1083 * Now get block number |
1084 * |
1085 F63A B1 DE 23 XSTBLK CMPA BLKNUM |
1086 F63D 26 06 BNE XSTBLKE |
1087 F63F 8E F6 50 LDX #XSTCOM |
1088 F642 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) |
1089 F644 39 RTS |
1090 * |
1091 * Error in block number |
1092 * |
1093 F645 86 15 XSTBLKE LDA #NAK |
1094 F647 17 FF 11 LBSR OUTTER |
1095 F64A 8E F6 1A LDX #XSTSTR |
1096 F64D 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) |
1097 F64F 39 RTS |
1098 * |
1099 * Get complement of block number |
1100 * |
1101 F650 43 XSTCOM COMA |
1102 F651 B1 DE 23 CMPA BLKNUM |
1103 F654 26 EF BNE XSTBLKE |
1104 F656 7F DE 21 CLR CHKSUM |
1105 F659 86 80 LDA #128 |
1106 F65B B7 DE 24 STA BYTCNT |
1107 F65E 8E F6 64 LDX #XSTDAT |
1108 F661 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) |
1109 F663 39 RTS |
1110 * |
1111 * Get data bytes |
1112 * |
1113 F664 34 02 XSTDAT PSHS A |
1114 F666 BB DE 21 ADDA CHKSUM |
1115 F669 B7 DE 21 STA CHKSUM |
1116 F66C 35 02 PULS A |
1117 F66E 7A DE 24 DEC BYTCNT |
1118 F671 26 03 BNE XSTDAT1 |
1119 F673 8E F6 7B LDX #XSTCHK |
1120 F676 1C FE XSTDAT1 ANDCC #$FF-CFLAG No abort |
1121 F678 1A 04 ORCC #ZFLAG Valid data (exit) |
1122 F67A 39 RTS |
1123 * |
1124 * Byte count reached zero |
1125 * Check checksum byte |
1126 * |
1127 F67B B1 DE 21 XSTCHK CMPA CHKSUM |
1128 F67E 26 07 BNE XSTCHK1 retry if wrong checksum |
1129 * |
1130 * Checksum OK ... |
1131 * increment block number |
1132 * and send ACK |
1133 * |
1134 F680 7C DE 23 INC BLKNUM |
1135 F683 86 06 LDA #ACK |
1136 F685 20 0D BRA XSTCHK2 |
1137 * |
1138 * Checksum Error detected ... |
1139 * Reset Sector counter in ACCB to last 128 byte boundary |
1140 * and send NAK |
1141 * |
1142 F687 34 04 XSTCHK1 PSHS B |
1143 F689 1F 30 TFR U,D |
1144 F68B 5A DECB |
1145 F68C C4 80 ANDB #128 |
1146 F68E 1F 03 TFR D,U |
1147 F690 35 04 PULS B |
1148 F692 86 15 LDA #NAK |
1149 F694 17 FE C4 XSTCHK2 LBSR OUTTER |
1150 F697 8E F6 1A LDX #XSTSTR |
1151 F69A 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit) |
1152 F69C 39 RTS |
1153 * |
1154 ** 'UP' Load ROMdisk via config PROM. |
1155 * |
1156 F69D 08 08 UPMES FCB $08,$08 |
1157 F69F 4C 6F 61 64 20 52 FCC 'Load ROM disk from config PROM.' |
4F 4D 20 64 69 73 |
6B 20 66 72 6F 6D |
20 63 6F 6E 66 69 |
67 20 50 52 4F 4D |
2E |
1158 F6BE 04 FCB 4 |
1159 F6BF 46 6F 75 6E 64 20 UPMES1 FCC 'Found SYNC, loading data...' |
53 59 4E 43 2C 20 |
6C 6F 61 64 69 6E |
67 20 64 61 74 61 |
2E 2E 2E |
1160 F6DA 0A 0D 04 FCB $0A,$0D,4 |
1161 F6DD 52 4F 4D 20 44 69 UPMES2 FCC 'ROM Disk Loaded.' |
73 6B 20 4C 6F 61 |
64 65 64 2E |
1162 F6ED 0A 0D 04 FCB $0A,$0D,4 |
1163 F6F0 52 4F 4D 20 44 69 UPMES3 FCC 'ROM Disk Not Found.' |
73 6B 20 4E 6F 74 |
20 46 6F 75 6E 64 |
2E |
1164 F703 0A 0D 04 FCB $0A,$0D,4 |
1165 * |
1166 F706 8E F6 9D UPSUB LDX #UPMES |
1167 F709 BD F4 6A JSR PDATA1 |
1168 * |
1169 F70C 8D 5A BSR UPRESET |
1170 F70E 10 8E 00 20 LDY #$0020 Set up count for 2 MBit |
1171 F712 8E 00 00 LDX #$0000 |
1172 F715 8D 6C UPSUB1 BSR UPBIT Shift in bit |
1173 F717 8D 7C BSR UPSYNC Test for Sync pattern` |
1174 F719 27 15 BEQ UPSUB4 Skip if found |
1175 F71B 30 1F LEAX -1,X Count Down inner loop |
1176 F71D 8C 00 00 CMPX #$0000 |
1177 F720 26 F3 BNE UPSUB1 Branch if inner loop not complete |
1178 F722 31 1F LEAY -1,X Count down outer loop |
1179 F724 10 8C 00 00 CMPY #$0000 |
1180 F728 26 EB BNE UPSUB1 Branch if outer loop not complete |
1181 * |
1182 F72A 8E F6 F0 LDX #UPMES3 2MBits scanned, no synch, report error |
1183 F72D 7E F4 6A JMP PDATA1 |
1184 * |
1185 F730 8E F6 BF UPSUB4 LDX #UPMES1 Sync found, now load disk |
1186 F733 BD F4 6A JSR PDATA1 |
1187 * |
1188 F736 4F CLRA |
1189 F737 B7 DE 1E STA DRVNUM select Drive 0 |
1190 F73A C6 01 LDB #$01 |
1191 F73C B7 DE 1F UPSUB2 STA TRACK track 0 |
1192 F73F F7 DE 20 STB SECTOR sector 1 |
1193 * |
1194 F742 17 F9 82 LBSR MAPIN map in buffer |
1195 F745 5F CLRB 256 byte sector |
1196 F746 8D 67 UPSUB3 BSR UPBYTE read byte from prom |
1197 F748 A7 C0 STA ,U+ Store in buffer |
1198 F74A 5A DECB |
1199 F74B 26 F9 BNE UPSUB3 Loop until sector read` |
1200 F74D 17 F9 AB LBSR MAPOUT map out buffer |
1201 * |
1202 F750 B6 DE 1F LDA TRACK Advance sector |
1203 F753 F6 DE 20 LDB SECTOR |
1204 F756 5C INCB |
1205 F757 C1 0F CMPB #EMAXSEC+1 Wrap on max sector count |
1206 F759 26 E1 BNE UPSUB2 |
1207 F75B C6 01 LDB #1 |
1208 F75D 4C INCA Advance track |
1209 F75E 81 30 CMPA #EMAXTRK |
1210 F760 26 DA BNE UPSUB2 |
1211 * |
1212 F762 8E F6 DD UPEXIT LDX #UPMES2 Load complete, report message |
1213 F765 7E F4 6A JMP PDATA1 |
1214 * |
1215 * Reset Serial PROM |
1216 * |
1217 F768 86 02 UPRESET LDA #PRSTHI Strobe the reset line |
1218 F76A B7 E0 C0 STA PROMREG |
1219 F76D 86 00 LDA #PRSTLO |
1220 F76F B7 E0 C0 STA PROMREG |
1221 F772 8E 00 00 LDX #$0000 Delay a while` |
1222 F775 30 1F UPRST1 LEAX -1,X |
1223 F777 8C 00 00 CMPX #$0000 |
1224 F77A 26 F9 BNE UPRST1 |
1225 F77C BF DF 46 STX SYNCREG+0 Clear Sync Shift Register |
1226 F77F BF DF 48 STX SYNCREG+2 |
1227 F782 39 RTS |
1228 * |
1229 * Input 1 Bit From PROM |
1230 * |
1231 F783 86 01 UPBIT LDA #PCLKHI |
1232 F785 B7 E0 C0 STA PROMREG |
1233 F788 86 00 LDA #PCLKLO |
1234 F78A B7 E0 C0 STA PROMREG |
1235 F78D B6 E0 C0 LDA PROMREG |
1236 F790 44 LSRA |
1237 F791 78 DF 49 ASL SYNCREG+3 |
1238 F794 39 RTS |
1239 * |
1240 * Test for 32 bit Sync Word |
1241 * |
1242 F795 79 DF 48 UPSYNC ROL SYNCREG+2 |
1243 F798 79 DF 47 ROL SYNCREG+1 |
1244 F79B 79 DF 46 ROL SYNCREG+0 |
1245 F79E CC FF 00 LDD #SYNCLO |
1246 F7A1 10 B3 DF 48 CMPD SYNCREG+2 |
1247 F7A5 26 07 BNE UPSYNCX |
1248 F7A7 CC AA 55 LDD #SYNCHI |
1249 F7AA 10 B3 DF 46 CMPD SYNCREG+0 |
1250 F7AE 39 UPSYNCX RTS |
1251 * |
1252 * Input 1 Byte From PROM |
1253 * |
1254 F7AF 34 04 UPBYTE PSHS B |
1255 F7B1 C6 08 LDB #8 |
1256 F7B3 8D CE UPBYTE1 BSR UPBIT |
1257 F7B5 5A DECB |
1258 F7B6 26 FB BNE UPBYTE1 |
1259 F7B8 B6 DF 49 LDA SYNCREG+3 |
1260 F7BB 35 84 PULS B,PC |
1261 * |
1262 ***** NEXTCMD ***** |
1263 * |
1264 F7BD 17 FC B2 NEXTEXT LBSR INPE GET ONE CHAR. FROM TERMINAL |
1265 F7C0 84 7F ANDA #$7F STRIP PARITY FROM CHAR. |
1266 F7C2 1F 89 TFR A,B |
1267 F7C4 86 20 LDA #$20 |
1268 F7C6 17 FC A5 LBSR OUTP PRNT SPACE |
1269 F7C9 C1 60 CMPB #$60 |
1270 F7CB 2F 02 BLE NXTEX0 |
1271 F7CD C0 20 SUBB #$20 |
1272 * |
1273 ***** DO TABLE LOOKUP ***** |
1274 * FOR COMMAND FUNCTIONS |
1275 * |
1276 F7CF 8E F7 E5 NXTEX0 LDX #EXTTAB POINT TO JUMP TABLE |
1277 F7D2 E1 80 NXTEX1 CMPB ,X+ DOES COMMAND MATCH TABLE ENTRY ? |
1278 F7D4 27 0D BEQ JMPEXT BRANCH IF MATCH FOUND |
1279 F7D6 30 02 LEAX 2,X POINT TO NEXT ENTRY IN TABLE |
1280 F7D8 8C F7 F4 CMPX #EXTEND REACHED END OF TABLE YET ? |
1281 F7DB 26 F5 BNE NXTEX1 IF NOT END, CHECK NEXT ENTRY |
1282 F7DD 8E F7 F4 LDX #MSGWHAT POINT TO MSG "WHAT?" |
1283 F7E0 16 FC 87 LBRA PDATA1 PRINT MSG AND RETURN |
1284 F7E3 6E 94 JMPEXT JMP [,X] JUMP TO COMMAND ROUTINE |
1285 * |
1286 * EXTENDED COMMAND JUMP TABLE |
1287 * |
1288 F7E5 EXTTAB EQU * |
1289 F7E5 42 FCC 'B' BOOT FLEX |
1290 F7E6 F4 0B FDB UBSUB |
1291 F7E8 4C FCC 'L' LOAD ROM DISK OVER SERIAL PORT |
1292 F7E9 F4 B2 FDB ULSUB |
1293 F7EB 46 FCC 'F' FORMAT RAM DISK |
1294 F7EC F2 DD FDB UFSUB |
1295 F7EE 50 FCC 'P' LOAD ROM DISK FROM PROM |
1296 F7EF F7 06 FDB UPSUB |
1297 F7F1 58 FCC 'X' XMODEM ROM DISK UPLOAD |
1298 F7F2 F5 AC FDB UXSUB |
1299 * |
1300 F7F4 EXTEND EQU * |
1301 * |
1302 F7F4 57 48 41 54 20 3F MSGWHAT FCC "WHAT ?" |
1303 F7FA 0A 0D 04 FCB $0A,$0D,$04 |
0012 END |
0013 END COLDS |
Program + Init Data = 7039 bytes |
Error count = 0 |
/flex9ram.sh
1,3 → 1,3
../../Tools/as09/as09.exe flex9ram.asm -l > flex9ram.lst |
../../Tools/as09/as09_dos.exe flex9ram.asm -l > flex9ram.lst |
../../Tools/epedit/epedit.exe flex9ram.aux |
|
/flex9cf8.sh
1,2 → 1,2
../../Tools/as09/as09.exe flex9cf8.asm -l > flex9cf8.lst |
../../Tools/epedit/epedit.exe flex9cf8.aux |
../../Tools/as09/as09_dos.exe flex9cf8.asm -l > flex9cf8.lst |
../../Tools/epedit/epedit.exe flex9cf8.aux |
/FLEX9RAM.S19
0,0 → 1,230
S123C7007EC7217EC7037EC7477EC7857EC7957EC71F0C00000000C810C810000000003BDC |
S123C720121A10BECC3110EF027DCC3426118ECCFC7CCC346D842707BFCC3110EE023B8ED3 |
S123C740CCF87FCC3420F11A107DC71B2729BEC719A6843402EC018ECAC0ED88403502A712 |
S123C760036F848601A7026F88226F883B7DC71E2729113F1220F61CEFAD9FD3ED7FCCFCBC |
S123C780113F1220F41A107DCC302705113F1220F47CCC30397FCC301CEF397DC71D2627BC |
S123C7A08ECAC0BDD406261F7DC71C270F7FC71C810A270F3402860A8D3C3502810D26034B |
S123C7C0B7C71C8D3120D4860D8D2B860A8D27B6C7128D227FC71DBEC7196D0327056A0332 |
S123C7E07EC74730048CC84026038EC810BFC7197AC71B7EC747BDCCD82B05113F1220F6C2 |
S106C8007ECCE403 |
S113C840FF000000535441525455500054585400B2 |
S123CA002006BDCAAC39C0A08639B7D3FDBECC2B308900A1BFCA06AD9FD3F1BED3FBBFCD14 |
S123CA200ABFCD0DBED3F9BFCD10BFCD13BED3F7BFCD4F8E00A0C6B9A684E78412E1842648 |
S123CA400BA78430890400BCCA0626EC3089FF5FBFCC2B8ECD03BFCC168ECADCBDCE81BD78 |
S123CA60CEB58D9EBDCEB58EC8408601A784BDD4062708A601BDD2007ECD678EC080BFCC75 |
S123CA80148EC840BDD406270534307ED2D7BECC14A780810D26E78EC840BDD1F48EC08054 |
S123CAA0BFCC148ECD67BFCC437ED32E8ECAECBDCE81BDCE2B8D1425F3B7CC0E8D0D25ECC9 |
S123CAC0B7CC0F8D0625E5B7CC1039BDD175250BB6CC1C5D27031CFE391A01393638303981 |
S121CAE020464C45582056332E3031044441544520284D4D2C44442C5959293F20048B |
S123CC0008183A190004400000FF1B0001000000000000000000000000000000000000003E |
S11ECC200000000000000000000000BFFF000001000000000000000000000036 |
S104CC496086 |
S123CC4E2B2B2B043F3F3F04574841543F0443414E2754205452414E53464552044E4F543E |
S123CC6E20464F554E44044449534B204552524F52202304445249564553204E4F54205296 |
S11DCC8E454144590447455400D20F4D4F4E00D34B00271003E80064000A08 |
S123CD007ECD577ECD677ECDB17ECD097ECD0C7ECD0F7ECD127ECEFB7ECF417ECE2B7ECEC5 |
S123CD20817ECFED7ECEB57ED00E7ECDEA7ED0367ED1A27ED0EB7ED3497ECF867ECFD47EE8 |
S123CD40D27F7ED12F7ECFD07ED1757ED3297ECD4E7ECE057ECE0510CEC07F7FCC11BDD460 |
S123CD60007FCC28BDD3FD10CEC07FBDDE188ECD03BFCC168EC700AF9FD3E9BED3E7AF9FBB |
S123CD80D3EB8ECCF8BFCC317FCC347FCC4C8D5AB6CC11B1CC0226057CCC1520147DCC2887 |
S123CDA010260597BDD40326B28ECC4EBDCE818D7ABDD0D4810D27E58EC8407CCC0DBDD003 |
S123CDC03625168ECC938D3E2709BECC1227078D3526036E9801BDD22E8ECC568615B7CCAF |
S123CDE020BDCE817FCC117ECD67BECD13BFCD10BECD0DBFCD0A7FCC237FCC227FCC217FC7 |
S123CE00CC267FCC2439108EC844A6A0815F23028020A18026086D8426F06DA4270C6D8058 |
S123CE2026FC30026D8426DE1CFB398EC080BFCC14BDCEFBB1CC01271DB1CC00271F810D4F |
S123CE40270D810A2732811F23E78CC0FF27E2A780810D26DC398ECC528D2620CE8CC080AF |
S123CE6027F4301FB6CC07810826088620BDCF66B6CC07BDCF6620B9860DBDCF41862020F2 |
S123CE80C98D32A6848104276FBDCF41300120F3BDCD4E2765AD9FD3E5B1CC0A265C7FCCF4 |
S123CEA01AAD9FD3E5B1CC0A2750810326F37FCC116E9FCC167DCC2126278DD4B6CC0327A6 |
S123CEC020B1CC1A22187FCC1A7DCC0927028DCE3404F6CC0827058D085A26FB35047CCC63 |
S123CEE01A860D8D5C860A8D583404F6CC0527064F8D4E5A26FA35041CFE397DCC23261A1B |
S123CF007DCC2627108D1A7DCC2F27117DCC24270C8D532008BDCD092003BDCD0C7FCC1AB7 |
S123CF2039BFCC47BECC262006BFCC47BECC24BDD4062604BECC47397FCC24BDD27F7ECDF9 |
S123CF40037DCC212620811F22057FCC2920177CCC293402B6CC04270BB1CC292406BDCEEE |
S123CF60B57CCC29350234027DCC2226137DCC2427048DB5200D7DCC262608BDCD0F200316 |
S123CF80BDCD123502397FCC4AF7CC1D8604B7CC4DEC848ECCA08D0B30027ACC4D26F71FAF |
S123CFA098203D7FCC4B10A3842507A3847CCC4B20F43402B6CC4B26107DCC4A260B7DCC6B |
S123CFC01D270B86208D2320057CCC4A8D1235828D023001A6848D04A684200444444444C2 |
S123CFE0840F8B30813923028B077ECF4181302514813923168141250C815A230E816125FD |
S123D00004817A23061A01B7CC11391CFE393410BECC14B6CC18B7CC19A680B7CC18810D42 |
S123D0202710B1CC02270BBFCC1481202604A18427E78DB935908615A70186FFA7036F0477 |
S123D0406F0CBDD0D48608B7CC4B8D34252E260F8D2E25282609BCCC3F276C8D232368BEC1 |
S123D060CC3F6D0427616D032A0F7DCC0D2705B6CC0B2003B6CC0CA7037FCC0DBECC3F393B |
S123D0808D8C254381392215BECC3F6D032A388403A703BDD00E242F812E1CFE39F6CC4B51 |
S123D0A02B253404C005F7CC4B3504B1CC4925028020A70430015ABDD00E2408812D270475 |
S123D0C0815F26065D26E41A01395D27CB6F0430015A20F6BFCC3FBECC14A68481202604C5 |
S123D0E0300120F6BFCC14BECC3F393430E60C2618108ED10B810B2210C6033D31A5C603D3 |
S123D100A6A0A70C30015A26F735B042494E545854434D4442415353595342414B5343524D |
S123D1204441544241434449525052544F5554BDD21EBDD00E25228D2625183404C6047886 |
S123D140CC1C79CC1B5A26F73504BBCC1CB7CC1C5C20DFBDD00E24FB39BECC1B1CFE3980CB |
S123D160472A0F8B062A048B072A078B0A2B031CFE391A0139BDD21EBDD00E25DC8139221A |
S123D180D2840F34043402FCCC1B584958495849F3CC1BF3CC1BEBE08900FDCC1B35045C71 |
S123D1A020D67FCC1D8D3D81022715811626F68D33B7CC1E8D2EB7CC1F8601B7CC1D20E5E7 |
S123D1C08D221F898D1E1E89F3CC1BFDCC3D8D141F894D27D08D0DBECC3DA780BFCC3D5A8B |
S123D1E026F320C18EC840BDD4062711A6018108260E32628604A784BDD406260D1CFE3902 |
S123D200B7CC20810426031A01398D737ECDE486008D35250F8D077CCC4C8D8620F14F5FC0 |
S123D220FDCC1B39F6CC4C1027FBAE7ECD0386028D228DEABDD1A2F6CC1D27046E9FCC1EB2 |
S123D2408ECC5C86817ECDDE34028EC840BDD0363502251A8EC840BDD0EB8EC8408601A70D |
S123D26084BDD1E4102500BB86FFA7883B39B6CC11810D2707B1CC021026FB5D1A013934B8 |
S123D28030A601B7CC202763BDCDEA10BECC2D260881102758108ED3618EC8406D02270906 |
S123D2A08604A784BDD406262E8EC838C60B8D6E8EC840B6CC0BA7038601A784BDD4062634 |
S123D2C016B6CC204A47474C6F8820A788218615A784BDD406271E8ECC75BDCE81BECC3FC1 |
S123D2E0B6CC20A7016F845FBDCF8635B08ECC82BDCE8120F6BDCEB58EC840B6CC204A8453 |
S123D30003C63F3DCB04E78822BDD40626C9BDCF41810D26F48604A784BDD40620CD3430CC |
S123D3207ED1008ECC6B7ECDE13506FDCC4310FFCC457FCC207CCC287ECDB87FCC2810FEE3 |
S123D340CC45F6CC206E9FCC433A397DCCFC26046E9FD3F38EC840861BA701BDD27F7ECDCD |
S10FD360674552524F525300005359537A |
S106CCC07ED370AC |
S106CCD87ED37094 |
S106CCE47ED37088 |
S10BCCF801000000000000002F |
S11BD370397ED3706E9FF8046E9FF8006E9FF8086E9FF80A6E9FF80672 |
S123D3E5D374D370DFC2DFC8D370D370D370D378D371D37CD380D3847ECA007ED4367ED4DF |
S123D405597ED47B204449534B204F5045524154494E472053595354454D20434F50595217 |
S123D4254947485420284329203139383020425920544543484E4943414C205359535445F3 |
S111D4454D5320434F4E53554C54414E5453B7 |
S123D435FFBDDE158ED409C60A8D118E0005BFD413BFD4157FD41A8ED41BC61A6F805A2631 |
S123D455FB7EC70CBDC709BED40927EB3088E4BFD40B3420BDDAC3352024ECBED40B6F02D2 |
S123D475BDC70CC6FF397DCCFC2703BDC7093424BFD40B6F01E6842622E602271AC10227DE |
S123D49511BDD5B4BED40B25267DCCFC26235F352439BDD6CF20EDC6122014C1162304C676 |
S123D4B501200C5A588ED4CEAD95BED40B2402E701BDC70C6D01352439D986D9D9DAF9DA09 |
S123D4D5C3D5E2D81DD838D876D641D69FD969DBD6DB2CD699DA87D810D56FD590DB07DDC0 |
S123D4F5BDDCFBDCE58D202605C6021A0139ED84AE846F846F01398D0E2705C60D1A01399D |
S123D515EC94ED841CFE39FCD40BC3001C8ED40910AE8426031CFB3910A384260139AE8405 |
S123D53520EEBED40B4F5F8D02C62FA7881130015A26F839BED40BC60BA604A78824300137 |
S123D5555A26F639BED40BC60BA6043402A68824A1E0260530015A26F039BED40BE6025404 |
S123D5752479E688237ED600BED40BE688226C88223AA788405C261F1A0139BED40BE602AA |
S123D595C403C1032655CA80E702E60FC580260AE688233AA788401CFE39C60B1A0139A677 |
S123D5B5883B2B3C27076A883B8620201D8D31251B8118221527F68109260C8D23250DBEA3 |
S123D5D5D40BA7883B20D84D27E31CFE39BDDAB1250985012705A7847ED9A0C6121A0139D1 |
S123D5F5BED40BE68822270A6C88223AA688401CFE398D0324EA39BED40BEC88406C882166 |
S123D61526036C882010830000271CED881E34028604A7882235028D132410C5802704C6F9 |
S123D635102006C6092002C6081A01398D25BED40BBDDE0C25128D11BDDE0026031CFE39A6 |
S123D65534048D17350424EE39BED40BEC881E308840394FB7D411B7D41239C5102611C55F |
S123D675802624F6D4115CC1072705F7D41120147FD411F6D4125CC104270CF7D412BED489 |
S123D6950BBDDE091CFE391A01398DC7BED40BBDDE0C2520BED40B8DB0BDDE03260AB6D40C |
S123D6B5352737BDDE062732C540260B34048DAB350424E039C6201A0139BED40BE6883B28 |
S123D6D52B3D8120260F5CE7883BC17F260C200D8D0B24E6395D272720F61CFE393402C168 |
S123D6F50126048620201086098D143502250F3402BED40BA6883B6F883B8D03350239BE49 |
S123D715D40BE602C1021026FED1E68822C104260834028D213502250FBDD57D240AC60488 |
S123D735BED40BE788221CFE39BED40B4F5FED8820ED88422027E688122622E688172744B9 |
S123D7556F88178D3F252A8DE025268DDC2522BED40BC602E78817EC88117EDC828D0EBE7A |
S123D775D40BED8840BDD69F241A7EDBC18D03EC8439BED40BE60386063D8ED41D3ABFD49E |
S123D7951B6D84398DE72605C6071A0139BED40BED88136D88122603ED88116C881626035D |
S123D7B56C88156D8817270BBDDC4325DDBED40BEC8813BDD62025D2BED40BEC88403406D2 |
S123D7D58DB03506ED84260A6F026F036F046F05200810AE04313F10AF044FBED40B6C8850 |
S123D7F52126036C88205FA7884030015A26F8BED40BEC8820ED88421CFE395F3404C603A0 |
S123D815200EBED415BFD413F6D4133404F6D414BED40BE788413504E788407FD4185FE79B |
S123D835882239BED40BE68822261DBDD60C2530BED40B7DD4182605DC44FDD4188610A711 |
S123D8558822EC881EED882FA68822A78831C6183414BDD5F53514A70430015A26F21CFEC1 |
S123D87539BED40BA68831A78822C6183414A604BDD714351430015A26F27ED69FBED40B15 |
S123D895A603A78823B6D4177DD41A2631A703BED415BFD4138C0005270C8D222337BED4BB |
S123D8B518BFD41320EFBED40BA68823A7032A0EBDDDBD25368D07231CBDDDAD20F2BED442 |
S123D8D50B7FD41ABDD549BDD81DBDD8382407C10827181A0139BED40BA604270C2A028DA3 |
S123D8F50FBDD55926E41CFE398D051CFB1CFE39A68833260CEC882FED8832A68831A78851 |
S123D9153439BDD78726178D182515C60610BED40BBED41BA6A85D3121A7805A26F61CFE70 |
S123D93539BDD810BDD60C2508BED40BC610E7882239BDD7878DEA25F8C60610BED40BBE01 |
S123D955D41BA680A7A85D31215A26F6BDD69F24E07EDBC1BED40B8602A702EC882FED88EF |
S123D9751EBDD6412508BDD87624057EDBC1C60A39BDD4FA253DBDD8922538263BBED40BA9 |
S123D9957DD41A2706A60F85202629BDDCC0252AEC8811ED8840BDDA76E688172713340447 |
S123D9B5BDD60C3504250C5A26F4BED40B5FE788221CFE39C6112002C6043404BDD50C3523 |
S123D9D5041A0139BED40B6D032A08BDDDBD2403C61039BDD4FA25E2BDD537BDD91725DA03 |
S123D9F5BDD89225D52604C60320CFBDDCC025CABED40BC60A6F0F30015A26F9BED40BECA5 |
S123DA1588322727ED882FA68834A78831FCCC0EED8819B6CC10A7881BBDDDADBDD96925D4 |
S123DA35998D3E8604A788221CFE39BED40B6F88176C8812EC882FBDD620250DBDD77225D7 |
S123DA5508BDD69F2406BDDBC17ED9CFBED40BEC881EED88328610A78834BDD94725EA20EF |
S123DA758ABED40BA684A7026F846F883B4FA78822398D28250E6F84441025FB7AC604E71B |
S123DA9588221CFE39BED40BA6028183260B8603A702BDD69F102501131CFE398DE7250D50 |
S123DAB5BED40BA602810323F0C6121A01398DEC253181022708BED40B6F027ED50CA68829 |
S123DAD5122605BDDBA720198DC82517BED40B6D88172705BDDC98250ABDD9692505BDD9F3 |
S123DAF54724D339BDD9862528BDD60C252386032018BDD986251ABED40BA60F858026129B |
S123DB15EC8813BDD62025098602BED40BA7021CFE39C60B1A01398D35BDD892252A2724BB |
S123DB35BED40BC60BA68824A70430015A26F68D4D2515BED40BA60F858026D6856026093F |
S123DB558D0C2055C6031A0139C60C1A0139BED40B860BB7D411A604E68835A78835E704F5 |
S123DB7530017AD41126EFBED40BA60C260CC603A6883DA70C30015A26F6BED40B398DCEA7 |
S123DB95BDD89225072606BED40B1CFE39C6041A0139BED40B86FFA704BDD969BED40B86F0 |
S123DBB500A70239ED8840BDD69F2414C5402608C580270AC6102006C60B2002C60A1A01C8 |
S123DBD539BDD917255E8DB8255ABED40BA60F8580265285602652BDD787BED41BEC0226F7 |
S123DBF50FBED40BEC88112733BED41BED842014BED40BBDD620252CBED40BEC8811271C29 |
S123DC158DA22520BED40BEC8813BED41BED02BED40BEC8815BED41BE304ED04BDDBA725A8 |
S123DC3503BDD94739C60B2002C60C1A0139EC881E5CE1883C2303C6014C10A38813260E4B |
S123DC55A6883781FF27074CA788371CFE398D332530BED40BA6883A8B032616EC881E100D |
S123DC75A388112705C6171A0139EC8840ED88388604A7883AEC8813ED88358601A7883780 |
S123DC951CFE39EC8838BDD62025F7BED40B1F12E6883A3AC603A6A8353121A788403001AF |
S123DCB55A26F3BDD69F24DA7EDBC1BDD810BDD60C2546BED40B4F5FED8820A68867A7883B |
S123DCD53C5F6F884030015A26F8BED40B1CFE39BED40BA68817271DEC88208300012A0355 |
S123DCF57EDD9AED8820BDDAB1250E4624076F84A688172605C6121A01397FD411EC88111D |
S123DD1510AE8820276ABDDD9F25EE4F5F6D022774EB028900BFD40FBED40B10A3882024BB |
S123DD352CBED40F30033402B6D4114CB7D4118154270881A83502274C20D23404BED40B73 |
S123DD55EC88408D45253E3504350220C0A38820BED40FA6023404A0E04A1F89A684EB011D |
S123DD75BED40B2505E1883C2306E0883C4C20F5BDD6202514BED40BEC884210A38820272F |
S123DD9514C6192002C6181A0139BDD6202508BED40BC6443A1CFE39BED40BC60BA688244F |
S123DDB5A70430015A26F639BED40BA6034C8104240FA7032605BDDE0F2003BDDE1225E819 |
S109DDD539C6101A0139E1 |
S123DE007EF0577EF05B7EF05F7EF0637EF06C7EF09F7EF0A37EF0A77EF0BF7EF0C3000067 |
S115DE2000000000000000000000000102031040FFFF98 |
S123F000F7BDF119F141F13FF13FF13FF13FF13FF052F052F052F119F141F13FF13FF13F7A |
S123F020F13FF13FF052F052F052F052F052F052F052F052F052F052F052F052F052F17AA7 |
S123F040F1E9F249F24EF24EF24EF24EF052F052F0525F5D1CFE396E9FDE326E9FDE346E18 |
S123F0609FDE368D072701396E9FDE383430E603F7DE1E8EDE2AA68581FF26083530C60FD8 |
S123F0805D1A0139C6143D8EF002308B108EDE32C614A680A7A05A26F935306E9FDE3A6E03 |
S123F0A09FDE3C6E9FDE3E4FB7DE1E8EDE1B8DBC2504AD9FDE40B6DE1E4C810426EA396ECB |
S123F0C09FDE426E9FDE441FA8B7DE221A50CEDE2AF6DE1EE6C5CEDE2EB6DE1FABC584F072 |
S123F0E0A7E2B6DE208001880F840FABE0B7FFF0B6DE1F840F8B005F1F03398600880FB794 |
S123F100FFF0B6DE221F8A39B7DE1FF7DE201CFE1A0439C6405D1A0139347017FFEA17FFD9 |
S123F120A6108EDE465FA6C0A7A05A26F917FFCB108EDE465FA6A0A7805A26F95F35F05F13 |
S123F14039347017FFC2CEDE2AF6DE1EE6C5C1012707C100270316FFBA108EDE465FA68092 |
S123F160A7A05A26F917FF5F108EDE465FA6A0A7C05A26F917FF845F35F0340434027FDE26 |
S123F180217FDE228673BDF285244CB6DE1EBDF28524443502BDF285243D3502BDF2852485 |
S123F1A0365FBDF2672430A780BBDE22B7DE2224037CDE215A26EBBDF267241B3402BDF26C |
S123F1C06724141F89350210B3DE21260E8606BDF28524035F200DC61020098615BDF28576 |
S123F1E024F5C609F7DE215D39340434027FDE217FDE228672BDF28524DDB6DE1EBDF28519 |
S123F20024D53502BDF28524CE3502BDF28524C75FA680BDF28524BFBBDE22B7DE22240309 |
S123F2207CDE215A26EBB6DE21BDF28524A9B6DE22BDF28524A1BDF267249C810626035F9A |
S123F2402002C60AF7DE215D39F6DE215D398651BDF285240CBDF2672407810626035F20F6 |
S123F26004C6101A015D3934308E03E8108E04E2B6E00047250A313F26F6301F26EE35B0BE |
S123F280B6E00135B0343034028E03E8108E04E2B6E0004747250C313F26F5301F26ED35E0 |
S123F2A00235B03502B7E00135B00A0D466F726D6174696E672052414D6469736B2E2E2EBC |
S123F2C020040A0D0452616D6469736B206E6F7420616C6C6F63617465642120048EF2AA77 |
S123F2E0BDF46A8EDE2A5FA6858101270C5CC10426F58EF2C2BDF46A39F7DE1E8EDE1BBD11 |
S123F300F06C8EDE464F5FA7805A26FB7FDE1F8601B7DE208EDE46B6DE1FA784B6DE204C43 |
S123F320810F26046C848601A701B6DE1FF6DE20BDF05B7CDE20B6DE20810F26D78601B748 |
S123F340DE207CDE1FB6DE1F814026C88EDE46863FC60EBDF0578EDE466F846F01863FC6E1 |
S123F3600EBDF05B8EDE464FC60EBDF0578EDE466F846F014FC60EBDF05B8EDE464FC60390 |
S123F380BDF0578EDE466F846F01CC5241ED8810CC4D44ED8812CC4953ED8814CC4B20ED73 |
S123F3A08816CC0001ED881BCC0101ED881D863FC60EED881FED8826CC0372ED88218601C8 |
S123F3C0A788238607A788248607A788254FC603BDF05B8EDE464FC601BDF0578EDE4686F2 |
S123F3E0AAA7848655A7014FC6017EF05B0808426F6F74696E6720696E7465726E616C2053 |
S123F400464C45582E2E2E2E0D0A048EF3EDBDF46A8ED3E5108EF434ECA1ED818CD3FD26D4 |
S123F420F78EDE00108EF44CECA1ED818CDE1E26F77ECD00F476F482DFC2DFC8F482F48288 |
S123F440F482F47EF482F47AF46EF4727EF0577EF05B7EF05F7EF0637EF06C7EF09F7EF093 |
S123F460A37EF0A77EF0BF7EF0C36E9FF80C6E9FF80A6E9FF8066E9FF8046E9FF8086E9F24 |
S123F480F8003953657269616C20524F4D204469736B2075706C6F6164202E2E2E0D0A04B4 |
S123F4A0524F4D204469736B204C6F616465640D0A048EF483BDF46A8600B7DE1E4FC601BC |
S123F4C0B7DE1FF7DE2017FBFE5FBDF4EDA7C05A26F817FC26B6DE1FF6DE205CC10F26E081 |
S123F4E0C6014C813026D98EF4A07EF46A34048D0E484848481F898D063404ABE03584BDE0 |
S123F500F52829FB80302BF781092F0A81112BEF81162EEB800739B6E0008501398603B760 |
S123F520E0008611B7E000398610B7DE277FDE287FDE29B6E000850126088578270A8DDD41 |
S123F54020E6B6E0011C02397ADE2926E67ADE2826E17ADE2726DC4F1A02393402B6E000AE |
S123F56085022608857827F58DB320F13502B7E001390D0A586D6F64656D20524F4D20446D |
S123F58069736B2055706C6F6164040D0A55706C6F616420436F6D706C657465040D0A5552 |
S123F5A0706C6F6164204572726F72048EF57217FEB88601B7DE238EF61ABFDE258600B76B |
S123F5C0DE1E4FC601B7DE1FF7DE2017FAF95F17002B2520A7C05A26F617FB1FB6DE1FF6C5 |
S123F5E0DE205CC10F26DEC6014C813026D78EF58B7EF46A17FB048EF59D16FE6D3410BE75 |
S123F600DE2517FF23280A861517FF4F8EF61A20F1AD8426EDBFDE253590810126068EF6CC |
S123F6203A1CFA3981042608860617FF2E1A0539811826031A05391CFA39B1DE2326068E8D |
S123F640F6501CFA39861517FF118EF61A1CFA3943B1DE2326EF7FDE218680B7DE248EF697 |
S123F660641CFA393402BBDE21B7DE2135027ADE2426038EF67B1CFE1A0439B1DE21260704 |
S123F6807CDE238606200D34041F305AC4801F033504861517FEC48EF61A1CFA3908084CF3 |
S123F6A06F616420524F4D206469736B2066726F6D20636F6E6669672050524F4D2E0446F9 |
S123F6C06F756E642053594E432C206C6F6164696E6720646174612E2E2E0A0D04524F4D9C |
S123F6E0204469736B204C6F616465642E0A0D04524F4D204469736B204E6F7420466F7575 |
S123F7006E642E0A0D048EF69DBDF46A8D5A108E00208E00008D6C8D7C2715301F8C000042 |
S123F72026F3311F108C000026EB8EF6F07EF46A8EF6BFBDF46A4FB7DE1EC601B7DE1FF78D |
S123F740DE2017F9825F8D67A7C05A26F917F9ABB6DE1FF6DE205CC10F26E1C6014C813089 |
S123F76026DA8EF6DD7EF46A8602B7E0C08600B7E0C08E0000301F8C000026F9BFDF46BF61 |
S123F780DF48398601B7E0C08600B7E0C0B6E0C04478DF493979DF4879DF4779DF46CCFF2F |
S123F7A00010B3DF482607CCAA5510B3DF46393404C6088DCE5A26FBB6DF49358417FCB20A |
S123F7C0847F1F89862017FCA5C1602F02C0208EF7E5E180270D30028CF7F426F58EF7F4AE |
S120F7E016FC876E9442F40B4CF4B246F2DD50F70658F5AC57484154203F0A0D0431 |
S9030000FC |
/f9-monex.lst
0,0 → 1,1412
Assembler release DWC_2.0 version 2.11 |
May 6, 2004 (c) Motorola (free ware) |
0001 * |
0002 ** FLEX 9 DISK DRIVERS |
0003 * |
0004 * FOR SYS09BUG ON THE |
0005 * DIGILENT SPARTAN 3 STARTER BOARD AND |
0006 * TERASIC CYCLONE 2 DE1 BOARD |
0007 * WITH I/O MAPPED AT $XE000 |
0008 * AND ROM MAPPED AT $XF000 |
0009 * THE DIGILENT SPARTAN 3 STARTER BOARD HAS 1MBYTE OF SRAM |
0010 * THE TERASIC CYCLONE 2 DE1 BOARD HAS 512KBYTE OF SRAM |
0011 * THE FIRST 64K IS USED BY FLEX, |
0012 * THE SECOND 128K IS USED AS A ROM DISK |
0013 * THE REMAINING RAM IS USED FOR A RAM DISK |
0014 * |
0015 * |
0016 0001 CFLAG EQU $01 CARRY FLAG |
0017 0002 VFLAG EQU $02 OVERFLOW FLAG |
0018 0004 ZFLAG EQU $04 ZERO FLAG |
0019 0008 NFLAG EQU $08 NEGATIVE FLAG |
0020 0010 IFLAG EQU $10 IRQ MASK CC |
0021 0020 HFLAG EQU $20 HALF CARRY |
0022 0040 FFLAG EQU $40 FIRQ MASK CC |
0023 0080 EFLAG EQU $80 ENTIRE FLAG |
0024 * |
0025 0000 MAPPAG EQU $00 PAGE $0000 DAT ADDRESS |
f9-monex.txt, line no. 26: Symbol undefined Pass 2 |
0026 0000 DATREG EQU IC11 DAT REGISTERS |
0027 * |
0028 * Serial Port |
0029 * |
f9-monex.txt, line no. 30: Symbol undefined Pass 2 |
0030 0000 ACIAC1 EQU ACIAS |
f9-monex.txt, line no. 31: Symbol undefined Pass 2 |
0031 0001 ACIAD1 EQU ACIAS+1 |
0032 04E2 DELCON EQU 1250 Delay (Processor clock in MHz * 50) |
0033 * |
0034 * XMODEM Control characters |
0035 * |
0036 0001 SOH EQU $01 |
0037 0004 EOT EQU $04 |
0038 0006 ACK EQU $06 |
0039 0015 NAK EQU $15 |
0040 0018 CAN EQU $18 |
0041 * |
0042 * DRIVE GEOMETRY |
0043 * |
0044 000E EMAXSEC EQU 14 ROM DISK |
0045 0030 EMAXTRK EQU 48 3 * 16 * 14 * 256 = 172,032 Bytes |
0046 0292 ETOTSEC EQU EMAXTRK*EMAXSEC-EMAXSEC |
0047 * |
0048 000E RMAXSEC EQU 14 RAM DISK |
0049 *RMAXTRK EQU 192 12 * 16 * 14 * 256 = 688,128 Bytes Digilent Spartan 3 |
0050 0040 RMAXTRK EQU 64 4 * 16 * 14 * 256 = 229,376 Bytes Terasic Cyclone 2 |
0051 0372 RTOTSEC EQU RMAXTRK*RMAXSEC-RMAXSEC |
0052 * |
0053 * DRIVE TYPES |
0054 * |
0055 0000 DTYPROM EQU 0 ROM DISK |
0056 0001 DTYPRAM EQU 1 RAM DISK |
0057 0002 DTYPFLS EQU 2 FLASH DISK |
0058 0003 DTYPNET EQU 3 FLEXNET DISK |
0059 * |
0060 DE00 ORG $DE00 |
0061 * |
0062 * DISK DRIVER JUMP TABLE LAST UPDATE: 22/12/2006 |
0063 * Disk driver for RAM Disk. |
0064 * |
0065 * 14 SECTORS PER TRACK |
0066 * 16 * N TRACKS PER DISK |
0067 * |
0068 * ROM DISK OCCUPIES $10000 - $1E000 ... $30000 - $3E000 |
0069 * RAM DISK OCCUPIES $40000 - $4E000 ... $F0000 - $FE000 |
0070 * Track Buffer page mapped at $E000 - $EFFF |
0071 * MAPPAG = $00 = 0 x $1000 (4 K pages) |
0072 |
0073 * ON SWTPC ROM AT $XF000 AND IO AT $XE000 |
0074 * APPEARS THROUGHOUT THE MEMORY SO MUST BE SKIPPED OVER |
0075 * WHEN USING RAM AS A RAMDISK. |
0076 * THE MSN OF THE TRACK MAPS INTO THE MSN OF THE DAT |
0077 * THE LSN OF THE TRACK NUMBER INDEXES INTO THE 4K RAM PAGE |
0078 * THE SECTOR MAPS INTO THE LSN OF THE DAT WHICH IS INVERTED |
0079 * |
0080 * |
0081 * |
0082 * FLEX disk jump table. |
0083 * |
0084 DE00 0E 57 READ JMP READSC |
f9-monex.txt, line no. 85: Phasing Error |
0085 DE02 0E 5B WRITE JMP WRITSC |
f9-monex.txt, line no. 86: Phasing Error |
0086 DE04 0E 5F VERIFY JMP BUSY |
f9-monex.txt, line no. 87: Phasing Error |
0087 DE06 0E 63 RESTOR JMP RESTR1 |
f9-monex.txt, line no. 88: Phasing Error |
0088 DE08 0E 6C DRIVE JMP DRVSEL |
f9-monex.txt, line no. 89: Phasing Error |
0089 DE0A 0E 9F DRVRDY JMP CHKRDY |
f9-monex.txt, line no. 90: Phasing Error |
0090 DE0C 0E A3 QUICK JMP CHKQIK |
f9-monex.txt, line no. 91: Phasing Error |
0091 DE0E 0E A7 COLDDR JMP DINIT |
f9-monex.txt, line no. 92: Phasing Error |
0092 DE10 0E BF WARMDR JMP DWARM |
f9-monex.txt, line no. 93: Phasing Error |
0093 DE12 0E C3 SEEK JMP SEEKTS |
0094 * |
0095 * RAM SPACE |
0096 * |
f9-monex.txt, line no. 97: Phasing Error |
0097 DE14 00 DRVNUM FCB 0 |
f9-monex.txt, line no. 98: Phasing Error |
0098 DE15 00 TRACK FCB 0 |
f9-monex.txt, line no. 99: Phasing Error |
0099 DE16 00 SECTOR FCB 0 |
f9-monex.txt, line no. 100: Phasing Error |
0100 DE17 00 CHKSUM FCB 0 |
f9-monex.txt, line no. 101: Phasing Error |
0101 DE18 00 CCSAVE FCB 0 |
f9-monex.txt, line no. 102: Phasing Error |
0102 DE19 00 BLKNUM FCB 0 Xmodem block number |
f9-monex.txt, line no. 103: Phasing Error |
0103 DE1A 00 BYTCNT FCB 0 Xmodem byte count |
f9-monex.txt, line no. 104: Phasing Error |
0104 DE1B 00 00 XSTATE FDB 0 Xmodem State Vector |
f9-monex.txt, line no. 105: Phasing Error |
0105 DE1D 00 00 00 DELCNT FCB $00,$00,$00 Xmodem Poll timer |
0106 * |
0107 * Disc driver type table. |
0108 * Indexed by drive number |
0109 * |
f9-monex.txt, line no. 110: Phasing Error |
0110 DE20 00 DTYPTAB FCB DTYPROM Drive 0 (ROM Disk) |
0111 DE21 01 FCB DTYPRAM Drive 1 (RAM Disk) |
0112 DE22 02 FCB DTYPFLS Drive 2 (FLASH Disk) |
0113 DE23 03 FCB DTYPNET Drive 3 (NETPC Disk) |
0114 * |
0115 * RAM Disk offset |
0116 * Indexed by drive type |
0117 * |
f9-monex.txt, line no. 118: Phasing Error |
0118 DE24 10 DOFFTAB FCB $10 ROM Disk $10000 |
0119 DE25 40 FCB $40 RAM DISK $40000 |
0120 DE26 FF FCB $FF Flash Disk |
0121 DE27 FF FCB $FF NETPC Disk |
0122 * |
f9-monex.txt, line no. 123: Phasing Error |
0123 DE28 REAVEC RMB 2 Disc driver jump table. |
f9-monex.txt, line no. 124: Phasing Error |
0124 DE2A WRIVEC RMB 2 |
f9-monex.txt, line no. 125: Phasing Error |
0125 DE2C VERVEC RMB 2 |
f9-monex.txt, line no. 126: Phasing Error |
0126 DE2E RSTVEC RMB 2 |
f9-monex.txt, line no. 127: Phasing Error |
0127 DE30 DRVVEC RMB 2 |
f9-monex.txt, line no. 128: Phasing Error |
0128 DE32 CHKVEC RMB 2 |
f9-monex.txt, line no. 129: Phasing Error |
0129 DE34 QUIVEC RMB 2 |
f9-monex.txt, line no. 130: Phasing Error |
0130 DE36 INIVEC RMB 2 |
f9-monex.txt, line no. 131: Phasing Error |
0131 DE38 WARVEC RMB 2 |
f9-monex.txt, line no. 132: Phasing Error |
0132 DE3A SEEVEC RMB 2 |
0133 * |
0134 * SECTOR BUFFER |
0135 * |
f9-monex.txt, line no. 136: Phasing Error |
0136 DE3C BUFFER RMB 256 |
f9-monex.txt, line no. 137: Phasing Error |
0137 DF3C SYNCREG RMB 4 Prom input register |
0138 * |
0139 **************************************** |
0140 * |
0141 * START OF EXTENSION COMMANDS |
0142 * |
0143 **************************************** |
0144 * |
f9-monex.txt, line no. 145: Symbol undefined Pass 2 |
0145 0000 ORG MONEXT |
0146 0000 07 9C FDB NEXTEXT Jump to next extended command |
0147 * |
0148 * |
0149 ***************************************** |
0150 * Disk drivers * |
0151 * ------------ * |
0152 * The system dependant code for the * |
0153 * disc drivers fits here. Two tables * |
0154 * must be included. These are DTYPTAB a * |
0155 * four byte table that defines which of * |
0156 * the (up to four) following sets of * |
0157 * jump tables to use, and TABSRT the * |
0158 * jump tables themselves. For a full * |
0159 * description of the floppy drivers see * |
0160 * section 4 (pp9-14) of the general * |
0161 * Flex adaptation guide. * |
0162 ***************************************** |
0163 * |
0164 * Mass storage drivers for embedded applications. |
0165 * |
0166 * Jump tables. |
0167 0002 01 17 TABSRT FDB EREAD Drive type 0 (ROM disk). |
0168 0004 01 3F FDB EWRITE |
0169 0006 01 3D FDB ECHECK |
0170 0008 01 3D FDB ECHECK |
0171 000A 01 3D FDB ECHECK |
0172 000C 01 3D FDB ECHECK |
0173 000E 01 3D FDB ECHECK |
0174 0010 00 52 FDB DDUMMY |
0175 0012 00 52 FDB DDUMMY |
0176 0014 00 52 FDB DDUMMY |
0177 * |
0178 0016 01 17 FDB EREAD Drive type 1 (RAM disk). |
0179 0018 01 3F FDB EWRITE |
0180 001A 01 3D FDB ECHECK |
0181 001C 01 3D FDB ECHECK |
0182 001E 01 3D FDB ECHECK |
0183 0020 01 3D FDB ECHECK |
0184 0022 01 3D FDB ECHECK |
0185 0024 00 52 FDB DDUMMY |
0186 0026 00 52 FDB DDUMMY |
0187 0028 00 52 FDB DDUMMY |
0188 * |
0189 002A 00 52 FDB DDUMMY Drive type 2 (External Flash disk). |
0190 002C 00 52 FDB DDUMMY |
0191 002E 00 52 FDB DDUMMY |
0192 0030 00 52 FDB DDUMMY |
0193 0032 00 52 FDB DDUMMY |
0194 0034 00 52 FDB DDUMMY |
0195 0036 00 52 FDB DDUMMY |
0196 0038 00 52 FDB DDUMMY |
0197 003A 00 52 FDB DDUMMY |
0198 003C 00 52 FDB DDUMMY |
0199 * |
0200 003E 01 78 FDB NREAD Drive type 3 (NetPC drive via serial port). |
0201 0040 01 E7 FDB NWRITE |
0202 0042 02 47 FDB NVERIFY |
0203 0044 02 4C FDB NCHECK |
0204 0046 02 4C FDB NCHECK |
0205 0048 02 4C FDB NCHECK |
0206 004A 02 4C FDB NCHECK |
0207 004C 00 52 FDB DDUMMY |
0208 004E 00 52 FDB DDUMMY |
0209 0050 00 52 FDB DDUMMY |
0210 * |
0211 * |
0212 * Dummy routine (no errors). |
0213 0052 5F DDUMMY CLRB |
0214 0053 5D TSTB Set (z)=1 |
0215 0054 1C FE ANDCC #$FF-CFLAG Set (c)=0 |
0216 0056 39 RTS |
0217 * * |
0218 ************************** |
0219 * Main Flex entry points * |
0220 ************************* |
0221 * |
0222 * Read sector routine. |
0223 * Entry: (X) = address where sector is to be placed. |
0224 * (A) = Track number. |
0225 * (B) = Sector number. |
0226 * Exit: (B) = Error code (z)=1 if no error. |
0227 0057 6E 9F DE 32 READSC JMP [REAVEC] |
0228 * |
0229 * Write track routine. |
0230 * Entry: (X) = Address of area of memory from which the data will be taken. |
0231 * (A) = Track number. |
0232 * (B) = Sector number. |
0233 * Exit: (B) = Error condition, (Z)=1 no an error. |
0234 005B 6E 9F DE 34 WRITSC JMP [WRIVEC] |
0235 * |
0236 * Verify sector routine. |
0237 * Entry: no parameters. |
0238 * Exit: (B) = Error condition (Z)=1 if no error. |
0239 005F 6E 9F DE 36 BUSY JMP [VERVEC] |
0240 * |
0241 * Restore drive to track 00. |
0242 * Entry: (X) = FCB address (3,X contains drive number). |
0243 * Exit: (B) = Error condition, (Z)=1 if no error. |
0244 0063 8D 07 RESTR1 BSR DRVSEL Select drive first. |
0245 0065 27 01 BEQ RST1 |
0246 0067 39 RTS |
0247 0068 6E 9F DE 38 RST1 JMP [RSTVEC] |
0248 * |
0249 * Select current drive. |
0250 * Entry: (X) = FCB address (3,X contains drive number). |
0251 * Exit: (B) = Error condition, (Z)=0 and (c)=1 if error. |
0252 * (B) = $0F if non existant drive. |
0253 006C 34 30 DRVSEL PSHS X,Y |
0254 006E E6 03 LDB 3,X Get driver type. |
0255 0070 F7 DE 1E STB DRVNUM |
0256 0073 8E DE 2A LDX #DTYPTAB |
0257 0076 A6 85 LDA B,X |
0258 0078 81 FF CMPA #$FF Is the drive nonexistant? |
0259 007A 26 08 BNE DRIVE1 |
0260 007C 35 30 PULS X,Y |
0261 007E C6 0F LDB #$0F |
0262 0080 5D TSTB |
0263 0081 1A 01 ORCC #$01 |
0264 0083 39 RTS |
0265 * |
0266 0084 C6 14 DRIVE1 LDB #20 Get correct table start address. |
0267 0086 3D MUL |
0268 0087 8E 00 02 LDX #TABSRT |
0269 008A 30 8B LEAX D,X |
0270 008C 10 8E DE 32 LDY #REAVEC Copy table into ram. |
0271 0090 C6 14 LDB #20 |
0272 0092 A6 80 DRIVE2 LDA 0,X+ |
0273 0094 A7 A0 STA 0,Y+ |
0274 0096 5A DECB |
0275 0097 26 F9 BNE DRIVE2 |
0276 0099 35 30 PULS X,Y |
0277 009B 6E 9F DE 3A JMP [DRVVEC] |
0278 * |
0279 * Check for drive ready. |
0280 * Entry: (X) = FCB address (3,X contains drive number)> |
0281 * Exit: (B) = Error condition, (Z)=0 AND (C)=1 if drive is not ready. |
0282 009F 6E 9F DE 3C CHKRDY JMP [CHKVEC] |
0283 * |
0284 * Quick drive ready check. |
0285 * Entry: (X) = FCB address (3,X contains drive number). |
0286 * Exit: (B) = Error condition, (Z)=0 AND (c)=1 if drive not ready. |
0287 00A3 6E 9F DE 3E CHKQIK JMP [QUIVEC] |
0288 * |
0289 * Init (cold start). |
0290 * Entry: no parameters. |
0291 * Exit: no change. |
0292 00A7 4F DINIT CLRA |
0293 00A8 B7 DE 1E DINIT1 STA DRVNUM Init each valid drive in turn. |
0294 00AB 8E DE 1B LDX #DRVNUM-3 |
0295 00AE 8D BC BSR DRVSEL |
0296 00B0 25 04 BCS DINIT2 |
0297 00B2 AD 9F DE 40 JSR [INIVEC] |
0298 00B6 B6 DE 1E DINIT2 LDA DRVNUM |
0299 00B9 4C INCA |
0300 00BA 81 04 CMPA #4 |
0301 00BC 26 EA BNE DINIT1 |
0302 00BE 39 RTS |
0303 * |
0304 * Warm start. |
0305 * Entry: no parameters. |
0306 * Exit: no change. |
0307 00BF 6E 9F DE 42 DWARM JMP [WARVEC] |
0308 * |
0309 * Seek track. |
0310 * Entry: (A) = Track number. |
0311 * (B) = Sector number. |
0312 * Exit: (B) = Error condition, (Z)=1 if no error. |
0313 00C3 6E 9F DE 44 SEEKTS JMP [SEEVEC] |
0314 * |
0315 * |
0316 ***************************************************** |
0317 * ROMdisk drivers * |
0318 * --------------- * |
0319 * Drivers to support a ROMdisk in the external RAM * |
0320 * of the SYS09. The ROMdisk base address is $10000 * |
0321 ***************************************************** |
0322 * Dummy return for ROM disk (write protected!) |
0323 * |
0324 * MAP RAM DISK INTO MEMORY SPACE |
0325 * |
0326 00C7 1F A8 MAPIN TFR CC,A ; Save state of interrupt masks |
0327 00C9 B7 DE 22 STA CCSAVE |
0328 00CC 1A 50 ORCC #FFLAG+IFLAG ; Mask interrupts while IO mapped out |
0329 00CE CE DE 2A LDU #DTYPTAB ; Point to Drive Type table |
0330 00D1 F6 DE 1E LDB DRVNUM ; Get working drive number |
0331 00D4 E6 C5 LDB B,U |
0332 00D6 CE DE 2E LDU #DOFFTAB |
0333 00D9 B6 DE 1F LDA TRACK |
0334 00DC AB C5 ADDA B,U ; Add Base offset into RAM |
0335 00DE 84 F0 ANDA #$F0 ; Mask MSN |
0336 00E0 A7 E2 STA ,-S ; Save A on stack |
0337 * |
0338 00E2 B6 DE 20 LDA SECTOR |
0339 00E5 80 01 SUBA #1 ; Sectors 1 to 14 => 0 to 13 |
0340 00E7 88 0F EORA #$0F ; Complement LSNybble |
0341 00E9 84 0F ANDA #$0F |
0342 * |
0343 00EB AB E0 ADDA ,S+ ; Add sector to LSN of Track and pop |
0344 00ED 97 00 STA DATREG+MAPPAG |
0345 * |
0346 00EF B6 DE 1F LDA TRACK ; LSN of Track indexes into 4K page |
0347 00F2 84 0F ANDA #$0F |
0348 00F4 8B 00 ADDA #MAPPAG*16 |
0349 00F6 5F CLRB |
0350 00F7 1F 03 TFR D,U |
0351 00F9 39 RTS |
0352 * |
0353 * MAP RAM DISK OUT OF MEMORY |
0354 * |
0355 00FA 86 00 MAPOUT LDA #MAPPAG ; Point to the Flex page |
0356 00FC 88 0F EORA #$0F ; Complement LSNybble |
0357 00FE 97 00 STA DATREG+MAPPAG ; map in Flex page |
0358 0100 B6 DE 22 LDA CCSAVE ; restore interrupt masks |
0359 0103 1F 8A TFR A,CC |
0360 0105 39 RTS |
0361 * |
0362 * Seek track and sector |
0363 * A holds track number (0-32) |
0364 * B holds sector number (1-14) |
0365 * |
0366 0106 B7 DE 1F ESEEK STA TRACK |
0367 0109 F7 DE 20 STB SECTOR |
0368 010C 1C FE ANDCC #$FE ; CLEAR CARRY |
0369 010E 1A 04 ORCC #$04 ; SET Z |
0370 0110 39 RTS |
0371 * |
0372 * MARK DISK READ ONLY |
0373 * |
0374 0111 C6 40 EDUMMY LDB #$40 |
0375 0113 5D TSTB |
0376 0114 1A 01 ORCC #$01 |
0377 0116 39 RTS |
0378 * |
0379 0117 34 70 EREAD PSHS X,Y,U push sequentialy to preserve order on stack |
0380 0119 17 FF EA LBSR ESEEK |
0381 011C 17 FF A8 LBSR MAPIN build external ram address |
0382 * |
0383 011F 10 8E DE 46 LDY #BUFFER |
0384 0123 5F CLRB |
0385 0124 A6 C0 ERLOOP1 LDA 0,U+ move 256 bytes to buffer from external RAM |
0386 0126 A7 A0 STA 0,Y+ |
0387 0128 5A DECB |
0388 0129 26 F9 BNE ERLOOP1 |
0389 * |
0390 012B 17 FF CC LBSR MAPOUT |
0391 * |
0392 012E 10 8E DE 46 LDY #BUFFER |
0393 0132 5F CLRB |
0394 0133 A6 A0 ERLOOP2 LDA 0,Y+ move 256 bytes from buffer to Flex RAM |
0395 0135 A7 80 STA 0,X+ |
0396 0137 5A DECB |
0397 0138 26 F9 BNE ERLOOP2 |
0398 * |
0399 013A 5F CLRB |
0400 013B 35 F0 PULS X,Y,U,PC restore all registers |
0401 * |
0402 * check for marker bytes $AA55 in first bytes of first track/sector |
0403 * |
0404 *ECHECK CLRA |
0405 * LDB #1 |
0406 * LDX #BUFFER |
0407 * BSR EREAD |
0408 * LDD BUFFER |
0409 * CMPD #$AA55 |
0410 * BNE EERR |
0411 * LBRA DDUMMY |
0412 *EERR LDB #$80 not ready bit set |
0413 * TSTB |
0414 * ORCC #$01 |
0415 * RTS |
0416 013D 5F ECHECK CLRB |
0417 013E 39 RTS |
0418 * |
0419 * Write Sector |
0420 * |
0421 013F 34 70 EWRITE PSHS X,Y,U |
0422 0141 17 FF C2 LBSR ESEEK |
0423 0144 CE DE 2A LDU #DTYPTAB ; Point to Drive Type table |
0424 0147 F6 DE 1E LDB DRVNUM ; Get working drive number |
0425 014A E6 C5 LDB B,U ; Fetch Drive type |
0426 014C C1 01 CMPB #DTYPRAM ; Is it a RAM Disk ? |
0427 014E 27 07 BEQ EWOK ; Yep, can write to it |
0428 0150 C1 00 CMPB #DTYPROM ; Allow writes to ROM Disk too |
0429 0152 27 03 BEQ EWOK |
0430 0154 16 FF BA LBRA EDUMMY ; Nope report read only |
0431 * |
0432 0157 10 8E DE 46 EWOK LDY #BUFFER |
0433 015B 5F CLRB |
0434 015C A6 80 EWLOOP1 LDA 0,X+ move 256 bytes to buffer from Flex RAM |
0435 015E A7 A0 STA 0,Y+ |
0436 0160 5A DECB |
0437 0161 26 F9 BNE EWLOOP1 |
0438 * |
0439 0163 17 FF 61 LBSR MAPIN |
0440 * |
0441 0166 10 8E DE 46 LDY #BUFFER |
0442 016A 5F CLRB |
0443 016B A6 A0 EWLOOP2 LDA 0,Y+ move 256 bytes from buffer to external RAM |
0444 016D A7 C0 STA 0,U+ |
0445 016F 5A DECB |
0446 0170 26 F9 BNE EWLOOP2 |
0447 * |
0448 0172 17 FF 85 LBSR MAPOUT |
0449 * |
0450 0175 5F CLRB |
0451 0176 35 F0 PULS X,Y,U,PC |
0452 * |
0453 * |
0454 ***************************************************** |
0455 * FlexNet drivers * |
0456 * --------------- * |
0457 * Drivers to support a remote connection via the * |
0458 * serial port using the FlexNet protocol as defined * |
0459 * in FLEXNet_421B * |
0460 ***************************************************** |
0461 * |
0462 * |
0463 * read sector from remote drive |
0464 * |
0465 0178 34 04 NREAD PSHS B |
0466 017A 34 02 PSHS A |
0467 017C 7F DE 21 CLR CHKSUM clear checksum |
0468 017F 7F DE 22 CLR CHKSUM+1 |
0469 * |
0470 0182 86 73 LDA #'s Send read sector command |
0471 0184 BD 02 81 JSR SCHAR |
0472 0187 24 4C BCC NRD_DNR if timeout, then flag drive not ready |
0473 * |
0474 0189 B6 DE 1E LDA DRVNUM send drive |
0475 018C BD 02 81 JSR SCHAR |
0476 018F 24 44 BCC NRD_DNR |
0477 * |
0478 0191 35 02 PULS A send track |
0479 0193 BD 02 81 JSR SCHAR |
0480 0196 24 3D BCC NRD_DNR |
0481 * |
0482 0198 35 02 PULS A send sector |
0483 019A BD 02 81 JSR SCHAR |
0484 019D 24 36 BCC NRD_DNR |
0485 * |
0486 * transfer 256 bytes |
0487 019F 5F CLRB |
0488 01A0 BD 02 65 NREAD1 JSR RCHAR read byte |
0489 01A3 24 30 BCC NRD_DNR if timeout, then flag drive not ready |
0490 01A5 A7 80 STA 0,X+ |
0491 01A7 BB DE 22 ADDA CHKSUM+1 update checksum |
0492 01AA B7 DE 22 STA CHKSUM+1 |
0493 01AD 24 03 BCC NREAD2 |
0494 01AF 7C DE 21 INC CHKSUM |
0495 01B2 5A NREAD2 DECB |
0496 01B3 26 EB BNE NREAD1 |
0497 * |
0498 * compare checksums |
0499 01B5 BD 02 65 JSR RCHAR get checksum msb |
0500 01B8 24 1B BCC NRD_DNR |
0501 01BA 34 02 PSHS A |
0502 01BC BD 02 65 JSR RCHAR get checksum lsb |
0503 01BF 24 14 BCC NRD_DNR |
0504 01C1 1F 89 TFR A,B |
0505 01C3 35 02 PULS A |
0506 01C5 10 B3 DE 21 CMPD CHKSUM compare checksums |
0507 01C9 26 0E BNE NRD_ERR if checksum error, then flag crc read error |
0508 * |
0509 01CB 86 06 LDA #ACK no checksum error, send ACK char |
0510 01CD BD 02 81 JSR SCHAR |
0511 01D0 24 03 BCC NRD_DNR |
0512 01D2 5F CLRB all OK, flag no error |
0513 01D3 20 0D BRA NRD_END |
0514 * |
0515 01D5 C6 10 NRD_DNR LDB #16 flag drive not ready |
0516 01D7 20 09 BRA NRD_END |
0517 * |
0518 01D9 86 15 NRD_ERR LDA #NAK send NAK |
0519 01DB BD 02 81 JSR SCHAR |
0520 01DE 24 F5 BCC NRD_DNR |
0521 01E0 C6 09 LDB #09 flag crc read error |
0522 * |
0523 01E2 F7 DE 21 NRD_END STB CHKSUM used by VERIFY |
0524 01E5 5D TSTB |
0525 01E6 39 RTS |
0526 * |
0527 * |
0528 * write sector to remote drive |
0529 * |
0530 01E7 34 04 NWRITE PSHS B |
0531 01E9 34 02 PSHS A |
0532 01EB 7F DE 21 CLR CHKSUM clear checksum |
0533 01EE 7F DE 22 CLR CHKSUM+1 |
0534 * |
0535 01F1 86 72 LDA #'r Send write sector command |
0536 01F3 BD 02 81 JSR SCHAR |
0537 01F6 24 DD BCC NRD_DNR if timeout, then flag drive not ready |
0538 * |
0539 01F8 B6 DE 1E LDA DRVNUM send drive |
0540 01FB BD 02 81 JSR SCHAR |
0541 01FE 24 D5 BCC NRD_DNR |
0542 * |
0543 0200 35 02 PULS A send track |
0544 0202 BD 02 81 JSR SCHAR |
0545 0205 24 CE BCC NRD_DNR |
0546 * |
0547 0207 35 02 PULS A send sector |
0548 0209 BD 02 81 JSR SCHAR |
0549 020C 24 C7 BCC NRD_DNR |
0550 * |
0551 * transfer 256 bytes |
0552 020E 5F CLRB |
0553 020F A6 80 NWRITE1 LDA 0,X+ |
0554 0211 BD 02 81 JSR SCHAR write byte |
0555 0214 24 BF BCC NRD_DNR if timeout, then flag drive not ready |
0556 0216 BB DE 22 ADDA CHKSUM+1 update checksum |
0557 0219 B7 DE 22 STA CHKSUM+1 |
0558 021C 24 03 BCC NWRITE2 |
0559 021E 7C DE 21 INC CHKSUM |
0560 0221 5A NWRITE2 DECB |
0561 0222 26 EB BNE NWRITE1 |
0562 * |
0563 * compare checksums |
0564 0224 B6 DE 21 LDA CHKSUM |
0565 0227 BD 02 81 JSR SCHAR send checksum msb |
0566 022A 24 A9 BCC NRD_DNR |
0567 022C B6 DE 22 LDA CHKSUM+1 |
0568 022F BD 02 81 JSR SCHAR send checksum lsb |
0569 0232 24 A1 BCC NRD_DNR |
0570 * |
0571 0234 BD 02 65 JSR RCHAR get checksum response |
0572 0237 24 9C BCC NRD_DNR |
0573 0239 81 06 CMPA #ACK |
0574 023B 26 03 BNE NWR_ERR if checksum error, then flag write error |
0575 * |
0576 023D 5F CLRB all OK, flag no error |
0577 023E 20 02 BRA NWR_END |
0578 * |
0579 0240 C6 0A NWR_ERR LDB #10 flag write error |
0580 * |
0581 0242 F7 DE 21 NWR_END STB CHKSUM used by VERIFY |
0582 0245 5D TSTB |
0583 0246 39 RTS |
0584 * |
0585 * |
0586 * verify last sector written to remote drive |
0587 * |
0588 0247 F6 DE 21 NVERIFY LDB CHKSUM test last checksum |
0589 024A 5D TSTB |
0590 024B 39 RTS |
0591 * |
0592 * |
0593 * quck check and check drive ready |
0594 * |
0595 024C 86 51 NCHECK LDA #'Q quick check command |
0596 024E BD 02 81 JSR SCHAR |
0597 0251 24 0C BCC NCK_ERR if timeout, then flag drive not ready |
0598 |
0599 0253 BD 02 65 JSR RCHAR get response from host |
0600 0256 24 07 BCC NCK_ERR |
0601 0258 81 06 CMPA #ACK |
0602 025A 26 03 BNE NCK_ERR if NAK, then flag drive not ready |
0603 |
0604 025C 5F CLRB all OK, flag drive ready |
0605 025D 20 04 BRA NCK_END |
0606 * |
0607 025F C6 10 NCK_ERR LDB #16 report drive not ready |
0608 0261 1A 01 ORCC #$01 check needs carry set as well |
0609 * |
0610 0263 5D NCK_END TSTB |
0611 0264 39 RTS |
0612 * |
0613 * |
0614 * recieve char from remote drive. |
0615 * timeout if no response for approx 1s. |
0616 * Entry: no parameters |
0617 * Exit: (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout. |
0618 * |
0619 0265 34 30 RCHAR PSHS X,Y |
0620 * |
0621 0267 8E 03 E8 LDX #1000 1000x inner loop |
0622 026A 10 8E 04 E2 RCHAR1 LDY #DELCON delay constant for inner loop (approx 1ms). |
0623 026E 96 00 RCHAR2 LDA ACIAC1 test for recieved char |
0624 0270 47 ASRA |
0625 0271 25 0A BCS RCHAR3 get character |
0626 0273 31 3F LEAY -1,Y else, continue to count delay |
0627 0275 26 F7 BNE RCHAR2 |
0628 0277 30 1F LEAX -1,X |
0629 0279 26 EF BNE RCHAR1 |
0630 027B 35 B0 PULS X,Y,PC return with error if timed out |
0631 * |
0632 027D 96 01 RCHAR3 LDA ACIAD1 return data (carry bit still set) |
0633 027F 35 B0 PULS X,Y,PC |
0634 * |
0635 * |
0636 * transmit char to remote drive. |
0637 * timeout if no response for approx 1s. (allows for use of hardware flow control) |
0638 * Entry: (A) = char to transmit |
0639 * Exit: (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout. |
0640 * |
0641 0281 34 30 SCHAR PSHS X,Y |
0642 0283 34 02 PSHS A |
0643 * |
0644 0285 8E 03 E8 LDX #1000 1000x inner loop |
0645 0288 10 8E 04 E2 SCHAR1 LDY #DELCON delay constant for inner loop (approx 1ms). |
0646 028C 96 00 SCHAR2 LDA ACIAC1 test for space in transmit FIFO |
0647 028E 47 ASRA |
0648 028F 47 ASRA |
0649 0290 25 0C BCS SCHAR3 send character |
0650 0292 31 3F LEAY -1,Y else, continue to count delay |
0651 0294 26 F6 BNE SCHAR2 |
0652 0296 30 1F LEAX -1,X |
0653 0298 26 EE BNE SCHAR1 |
0654 029A 35 02 PULS A |
0655 029C 35 B0 PULS X,Y,PC return with error if timed out |
0656 * |
0657 029E 35 02 SCHAR3 PULS A |
0658 02A0 97 01 STA ACIAD1 send data (carry bit still set) |
0659 02A2 35 B0 PULS X,Y,PC |
0660 * |
0661 ** 'UF' Format RAMdisc to FLEX standard. |
0662 * |
0663 02A4 0A 0D DISFOS FCB $0A,$0D |
0664 02A6 46 6F 72 6D 61 74 FCC 'Formating RAMdisk... ' |
69 6E 67 20 52 41 |
4D 64 69 73 6B 2E |
2E 2E 20 |
0665 02BB 04 FCB 4 |
0666 02BC 0A 0D 04 MESS6 FCB $0A,$0D,4 |
0667 02BF 52 61 6D 64 69 73 FCC 'Ramdisk not allocated! ' |
6B 20 6E 6F 74 20 |
61 6C 6C 6F 63 61 |
74 65 64 21 20 |
0668 02D6 04 FCB 4 |
0669 * |
0670 02D7 8E 02 A4 UFSUB LDX #DISFOS |
0671 02DA BD 04 50 JSR PDATA1 |
0672 02DD 8E DE 2A LDX #DTYPTAB search for allocated ramdisk |
0673 02E0 5F CLRB |
0674 02E1 A6 85 FMT9 LDA B,X |
0675 02E3 81 01 CMPA #DTYPRAM driver type 1 is ramdisk |
0676 02E5 27 0C BEQ FFOUND |
0677 02E7 5C INCB |
0678 02E8 C1 04 CMPB #4 end of table? then not allocated. |
0679 02EA 26 F5 BNE FMT9 |
0680 02EC 8E 02 BC LDX #MESS6 |
0681 02EF BD 04 50 JSR PDATA1 |
0682 02F2 39 RTS |
0683 * |
0684 02F3 F7 DE 1E FFOUND STB DRVNUM |
0685 02F6 8E DE 1B LDX #DRVNUM-3 |
0686 02F9 9D 6C JSR DRVSEL |
0687 * |
0688 * set up free chain |
0689 * |
0690 02FB 8E DE 46 LDX #BUFFER clear out buffer |
0691 02FE 4F CLRA |
0692 02FF 5F CLRB |
0693 0300 A7 80 DFL1 STA 0,X+ |
0694 0302 5A DECB |
0695 0303 26 FB BNE DFL1 |
0696 * |
0697 0305 7F DE 1F CLR TRACK |
0698 0308 86 01 LDA #1 |
0699 030A B7 DE 20 STA SECTOR |
0700 030D 8E DE 46 DFL2 LDX #BUFFER |
0701 0310 B6 DE 1F LDA TRACK |
0702 0313 A7 84 STA 0,X |
0703 0315 B6 DE 20 LDA SECTOR |
0704 0318 4C INCA |
0705 0319 81 0F CMPA #RMAXSEC+1 last sector on track? |
0706 031B 26 04 BNE DFL3 |
0707 031D 6C 84 INC 0,X |
0708 031F 86 01 LDA #1 |
0709 0321 A7 01 DFL3 STA 1,X |
0710 0323 B6 DE 1F LDA TRACK |
0711 0326 F6 DE 20 LDB SECTOR |
0712 0329 9D 5B JSR WRITSC |
0713 032B 7C DE 20 INC SECTOR |
0714 032E B6 DE 20 LDA SECTOR |
0715 0331 81 0F CMPA #RMAXSEC+1 |
0716 0333 26 D8 BNE DFL2 |
0717 0335 86 01 LDA #1 |
0718 0337 B7 DE 20 STA SECTOR |
0719 033A 7C DE 1F INC TRACK |
0720 033D B6 DE 1F LDA TRACK |
0721 0340 81 40 CMPA #RMAXTRK |
0722 0342 26 C9 BNE DFL2 |
0723 * break free chain at last track/sector |
0724 0344 8E DE 46 LDX #BUFFER |
0725 0347 86 3F LDA #RMAXTRK-1 |
0726 0349 C6 0E LDB #RMAXSEC |
0727 034B 9D 57 JSR READSC |
0728 034D 8E DE 46 LDX #BUFFER |
0729 0350 6F 84 CLR 0,X |
0730 0352 6F 01 CLR 1,X |
0731 0354 86 3F LDA #RMAXTRK-1 |
0732 0356 C6 0E LDB #RMAXSEC |
0733 0358 9D 5B JSR WRITSC |
0734 * set up sector structure, SIR, directory etc |
0735 035A 8E DE 46 LDX #BUFFER |
0736 035D 4F CLRA |
0737 035E C6 0E LDB #RMAXSEC |
0738 0360 9D 57 JSR READSC |
0739 0362 8E DE 46 LDX #BUFFER |
0740 0365 6F 84 CLR 0,X break end of directory chain |
0741 0367 6F 01 CLR 1,X |
0742 0369 4F CLRA |
0743 036A C6 0E LDB #RMAXSEC |
0744 036C 9D 5B JSR WRITSC |
0745 * |
0746 036E 8E DE 46 LDX #BUFFER |
0747 0371 4F CLRA |
0748 0372 C6 03 LDB #3 set up SIR |
0749 0374 9D 57 JSR READSC |
0750 0376 8E DE 46 LDX #BUFFER |
0751 0379 6F 84 CLR 0,X break forward link |
0752 037B 6F 01 CLR 1,X |
0753 037D CC 52 41 LDD #$5241 set volume name (RAMDISK ) |
0754 0380 ED 88 10 STD 16,X |
0755 0383 CC 4D 44 LDD #$4D44 |
0756 0386 ED 88 12 STD 18,X |
0757 0389 CC 49 53 LDD #$4953 |
0758 038C ED 88 14 STD 20,X |
0759 038F CC 4B 20 LDD #$4B20 |
0760 0392 ED 88 16 STD 22,X |
0761 0395 CC 00 01 LDD #1 volume number |
0762 0398 ED 88 1B STD 27,X |
0763 039B CC 01 01 LDD #$0101 first trk/sec 01-01 |
0764 039E ED 88 1D STD 29,X |
0765 03A1 86 3F LDA #RMAXTRK-1 |
0766 03A3 C6 0E LDB #RMAXSEC |
0767 03A5 ED 88 1F STD 31,X |
0768 03A8 ED 88 26 STD 38,X |
0769 03AB CC 03 72 LDD #RTOTSEC total DATA sectors (2912-14) |
0770 03AE ED 88 21 STD 33,X |
0771 * |
0772 03B1 86 01 LDA #01 month set default creation date (SYS09's birthday!) |
0773 03B3 A7 88 23 STA 35,X |
0774 03B6 86 07 LDA #07 day |
0775 03B8 A7 88 24 STA 36,X |
0776 03BB 86 07 LDA #07 year |
0777 03BD A7 88 25 STA 37,X |
0778 * |
0779 03C0 4F RF3 CLRA |
0780 03C1 C6 03 LDB #3 |
0781 03C3 9D 5B JSR WRITSC |
0782 * |
0783 03C5 8E DE 46 LDX #BUFFER |
0784 03C8 4F CLRA |
0785 03C9 C6 01 LDB #1 |
0786 03CB 9D 57 JSR READSC |
0787 03CD 8E DE 46 LDX #BUFFER |
0788 03D0 86 AA LDA #$AA set the init flag |
0789 03D2 A7 84 STA 0,X |
0790 03D4 86 55 LDA #$55 |
0791 03D6 A7 01 STA 1,X |
0792 03D8 4F CLRA |
0793 03D9 C6 01 LDB #1 |
0794 03DB 0E 5B JMP WRITSC |
0795 * |
0796 ******************************** |
0797 * System specific Boot * |
0798 * command goes here. * |
0799 ******************************** |
0800 * |
0801 * Boot FLEX from the FPGA's internal pre-loaded scratch RAM |
0802 * |
0803 03DD 08 08 UBMESS FCB $08, $08 |
0804 03DF 42 6F 6F 74 69 6E FCC 'Booting internal FLEX....' |
67 20 69 6E 74 65 |
72 6E 61 6C 20 46 |
4C 45 58 2E 2E 2E |
2E |
0805 03F8 0D 0A 04 FCB $0D,$0A,$04 |
0806 * |
0807 03FB 8E 03 DD UBSUB LDX #UBMESS |
0808 03FE BD 04 50 JSR PDATA1 |
0809 * |
0810 0401 8E D3 E5 LDX #$D3E5 |
0811 0404 10 8E 04 24 LDY #CONTAB Overlay console driver table |
0812 0408 EC A1 UB1 LDD 0,Y++ |
0813 040A ED 81 STD 0,X++ |
0814 040C 8C D3 FD CMPX #$D3FD |
0815 040F 26 F7 BNE UB1 |
0816 * |
0817 0411 8E DE 00 LDX #$DE00 Overlay disk driver table |
0818 0414 10 8E 04 3C LDY #DISTAB |
0819 0418 EC A1 UB2 LDD 0,Y++ |
0820 041A ED 81 STD 0,X++ |
0821 041C 8C DE 1E CMPX #$DE1E |
0822 041F 26 F7 BNE UB2 |
0823 * |
0824 0421 7E CD 00 UBEND JMP $CD00 |
0825 * |
0826 * FLEX console jump table. |
0827 0424 04 5C CONTAB FDB INPNE INPUT NO ECHO |
0828 0426 04 68 FDB DUMMY INTERRUPT HANDLER |
f9-monex.txt, line no. 829: Symbol undefined Pass 2 |
0829 0428 00 02 FDB MONRAM+$02 SWI VECTOR |
f9-monex.txt, line no. 830: Symbol undefined Pass 2 |
0830 042A 00 08 FDB MONRAM+$08 IRQ VECTOR |
0831 042C 04 68 FDB DUMMY TIMER OFF |
0832 042E 04 68 FDB DUMMY TIMER ON |
0833 0430 04 68 FDB DUMMY TIMER INITIALIZATION |
0834 0432 04 64 FDB CONTRL MONITOR |
0835 0434 04 68 FDB DUMMY TERMINAL INITIALIZATION |
0836 0436 04 60 FDB STATUS INPUT CHECK |
0837 0438 04 54 FDB OUTP TERMINAL OUTPUT |
0838 043A 04 58 FDB INPE TERMINAL INPUT WITH ECHO |
0839 * |
0840 * FLEX disk jump table. |
0841 043C 0E 57 DISTAB JMP READSC |
0842 043E 0E 5B JMP WRITSC |
0843 0440 0E 5F JMP BUSY |
0844 0442 0E 63 JMP RESTR1 |
0845 0444 0E 6C JMP DRVSEL |
0846 0446 0E 9F JMP CHKRDY |
0847 0448 0E A3 JMP CHKQIK |
0848 044A 0E A7 JMP DINIT |
0849 044C 0E BF JMP DWARM |
0850 044E 0E C3 JMP SEEKTS |
0851 * |
0852 * Monitor jumps |
0853 * |
f9-monex.txt, line no. 854: Symbol undefined Pass 2 |
0854 0450 6E 9F 00 00 PDATA1 JMP [PDATAV] |
f9-monex.txt, line no. 855: Symbol undefined Pass 2 |
0855 0454 6E 9F 00 00 OUTP JMP [OUTCHV] |
f9-monex.txt, line no. 856: Symbol undefined Pass 2 |
0856 0458 6E 9F 00 00 INPE JMP [INCHEV] |
f9-monex.txt, line no. 857: Symbol undefined Pass 2 |
0857 045C 6E 9F 00 00 INPNE JMP [INCHV] |
f9-monex.txt, line no. 858: Symbol undefined Pass 2 |
0858 0460 6E 9F 00 00 STATUS JMP [INCHKV] |
f9-monex.txt, line no. 859: Symbol undefined Pass 2 |
0859 0464 6E 9F 00 00 CONTRL JMP [MONITV] |
0860 0468 39 DUMMY RTS |
0861 * |
0862 ** 'UL' LOAD ROM DISK VIA SERIAL PORT |
0863 * |
0864 0469 53 65 72 69 61 6C ULMES FCC 'Serial ROM Disk upload ...' |
20 52 4F 4D 20 44 |
69 73 6B 20 75 70 |
6C 6F 61 64 20 2E |
2E 2E |
0865 0483 0D 0A 04 FCB $0D,$0A,$04 |
0866 0486 52 4F 4D 20 44 69 ULMES1 FCC 'ROM Disk Loaded' |
73 6B 20 4C 6F 61 |
64 65 64 |
0867 0495 0D 0A 04 FCB $0D,$0A,$04 |
0868 * |
0869 0498 8E 04 69 ULSUB LDX #ULMES |
0870 049B BD 04 50 JSR PDATA1 |
0871 * |
0872 049E 86 00 LDA #$00 |
0873 04A0 B7 DE 1E STA DRVNUM |
0874 04A3 4F CLRA TRACK 0 |
0875 04A4 C6 01 LDB #$01 SECTOR 1 |
0876 04A6 B7 DE 1F ULLOOP0 STA TRACK |
0877 04A9 F7 DE 20 STB SECTOR` |
0878 04AC 17 FC 18 LBSR MAPIN |
0879 * |
0880 04AF 5F CLRB xfer 256 bytes at a time. |
0881 04B0 BD 04 D3 ULLOOP1 JSR LRBYTE transfer should be hex bytes |
0882 04B3 A7 C0 STA ,U+ |
0883 04B5 5A DECB |
0884 04B6 26 F8 BNE ULLOOP1 |
0885 * |
0886 04B8 17 FC 3F LBSR MAPOUT |
0887 * |
0888 04BB B6 DE 1F LDA TRACK |
0889 04BE F6 DE 20 LDB SECTOR |
0890 04C1 5C INCB |
0891 04C2 C1 0F CMPB #EMAXSEC+1 |
0892 04C4 26 E0 BNE ULLOOP0 |
0893 04C6 C6 01 LDB #1 |
0894 04C8 4C INCA |
0895 04C9 81 30 CMPA #EMAXTRK |
0896 04CB 26 D9 BNE ULLOOP0 |
0897 * |
0898 04CD 8E 04 86 ULEXIT LDX #ULMES1 |
0899 04D0 7E 04 50 JMP PDATA1 |
0900 * |
0901 * Read a byte from the serial port |
0902 * |
0903 04D3 34 04 LRBYTE PSHS B |
0904 04D5 8D 0E BSR LRHEX Get hex digit. |
0905 04D7 48 ASLA |
0906 04D8 48 ASLA Shift to msb. |
0907 04D9 48 ASLA |
0908 04DA 48 ASLA |
0909 04DB 1F 89 TFR A,B Save in B. |
0910 04DD 8D 06 BSR LRHEX Get next digit. |
0911 04DF 34 04 PSHS B |
0912 04E1 AB E0 ADDA 0,S+ Add together bytes. |
0913 04E3 35 84 PULS B,PC |
0914 * |
0915 04E5 BD 05 0B LRHEX JSR INTER |
0916 04E8 29 FB BVS LRHEX |
0917 04EA 80 30 SUBA #$30 Remove ascii bias. |
0918 04EC 2B F7 BMI LRHEX |
0919 04EE 81 09 CMPA #$09 Number? |
0920 04F0 2F 0A BLE LRHEX1 Yes. |
0921 04F2 81 11 CMPA #$11 Keep testing. |
0922 04F4 2B EF BMI LRHEX |
0923 04F6 81 16 CMPA #$16 |
0924 04F8 2E EB BGT LRHEX |
0925 04FA 80 07 SUBA #$07 |
0926 04FC 39 LRHEX1 RTS |
0927 * |
0928 * ACIA INPUT TEST |
0929 * |
0930 04FD 96 00 INTEST LDA ACIAC1 |
0931 04FF 85 01 BITA #$01 |
0932 0501 39 RTS |
0933 * |
0934 * RESET ACIA |
0935 * |
0936 0502 86 03 ACIRST LDA #$03 master reset |
0937 0504 97 00 STA ACIAC1 |
0938 0506 86 11 LDA #$11 |
0939 0508 97 00 STA ACIAC1 |
0940 050A 39 RTS |
0941 * |
0942 * ACIA INPUT |
0943 * |
0944 050B 86 10 INTER LDA #16 |
0945 050D B7 DE 27 STA DELCNT+0 |
0946 0510 7F DE 28 CLR DELCNT+1 |
0947 0513 7F DE 29 CLR DELCNT+2 |
0948 0516 96 00 INTER0 LDA ACIAC1 |
0949 0518 85 01 BITA #$01 |
0950 051A 26 08 BNE INTER1 |
0951 051C 85 78 BITA #$78 |
0952 051E 27 09 BEQ INTER2 |
0953 0520 8D E0 BSR ACIRST |
0954 0522 20 E7 BRA INTER |
0955 * |
0956 0524 96 01 INTER1 LDA ACIAD1 |
0957 0526 1C 02 ANDCC #VFLAG |
0958 0528 39 RTS |
0959 * |
0960 0529 7A DE 29 INTER2 DEC DELCNT+2 |
0961 052C 26 E8 BNE INTER0 |
0962 052E 7A DE 28 DEC DELCNT+1 |
0963 0531 26 E3 BNE INTER0 |
0964 0533 7A DE 27 DEC DELCNT+0 |
0965 0536 26 DE BNE INTER0 |
0966 0538 4F CLRA |
0967 0539 1A 02 ORCC #VFLAG |
0968 053B 39 RTS |
0969 * |
0970 * ACIA OUTPUT |
0971 * |
0972 053C 34 02 OUTTER PSHS A |
0973 * |
0974 053E 96 00 OUTTE1 LDA ACIAC1 |
0975 0540 85 02 BITA #$02 |
0976 0542 26 08 BNE OUTTE2 |
0977 0544 85 78 BITA #$78 |
0978 0546 27 F6 BEQ OUTTE1 |
0979 0548 8D B8 BSR ACIRST |
0980 054A 20 F2 BRA OUTTE1 |
0981 * |
0982 054C 35 02 OUTTE2 PULS A |
0983 054E 97 01 STA ACIAD1 |
0984 0550 39 RTS |
0985 * |
0986 ** 'UX' Xmodem ROM Disk upload |
0987 * |
0988 0551 0D 0A UXMES FCB $0D,$0A |
0989 0553 58 6D 6F 64 65 6D FCC 'Xmodem ROM Disk Upload' |
20 52 4F 4D 20 44 |
69 73 6B 20 55 70 |
6C 6F 61 64 |
0990 0569 04 FCB 4 |
0991 056A 0D 0A UXMES1 FCB $0D,$0A |
0992 056C 55 70 6C 6F 61 64 FCC 'Upload Complete' |
20 43 6F 6D 70 6C |
65 74 65 |
0993 057B 04 FCB 4 |
0994 057C 0D 0A UXMES2 FCB $0D,$0A |
0995 057E 55 70 6C 6F 61 64 FCC 'Upload Error' |
20 45 72 72 6F 72 |
0996 058A 04 FCB 4 |
0997 * |
0998 058B 8E 05 51 UXSUB LDX #UXMES |
0999 058E 17 FE BF LBSR PDATA1 |
1000 * |
1001 0591 86 01 LDA #1 |
1002 0593 B7 DE 23 STA BLKNUM |
1003 0596 8E 05 F9 LDX #XSTSTR |
1004 0599 BF DE 25 STX XSTATE |
1005 * |
1006 059C 86 00 LDA #$00 |
1007 059E B7 DE 1E STA DRVNUM |
1008 05A1 4F CLRA TRACK 0 |
1009 05A2 C6 01 LDB #$01 SECTOR 1 |
1010 05A4 B7 DE 1F UXLOOP0 STA TRACK |
1011 05A7 F7 DE 20 STB SECTOR |
1012 05AA 17 FB 1A LBSR MAPIN |
1013 * |
1014 05AD 5F CLRB xfer 256 bytes at a time. |
1015 05AE 17 00 2B UXLOOP1 LBSR XBYTE transfer should be hex bytes |
1016 05B1 25 20 BCS UXERR |
1017 05B3 A7 C0 STA ,U+ |
1018 05B5 5A DECB |
1019 05B6 26 F6 BNE UXLOOP1 |
1020 * |
1021 05B8 17 FB 3F LBSR MAPOUT |
1022 * |
1023 05BB B6 DE 1F LDA TRACK |
1024 05BE F6 DE 20 LDB SECTOR |
1025 05C1 5C INCB |
1026 05C2 C1 0F CMPB #EMAXSEC+1 |
1027 05C4 26 DE BNE UXLOOP0 |
1028 05C6 C6 01 LDB #1 |
1029 05C8 4C INCA |
1030 05C9 81 30 CMPA #EMAXTRK |
1031 05CB 26 D7 BNE UXLOOP0 |
1032 * |
1033 05CD 8E 05 6A UXEXIT LDX #UXMES1 |
1034 05D0 7E 04 50 JMP PDATA1 |
1035 * |
1036 05D3 17 FB 24 UXERR LBSR MAPOUT |
1037 05D6 8E 05 7C LDX #UXMES2 |
1038 05D9 16 FE 74 LBRA PDATA1 |
1039 * |
1040 * Get a Byte using XModem protocol |
1041 * Carry clear => no errors |
1042 * Carry set => errors |
1043 * |
1044 05DC 34 10 XBYTE PSHS X |
1045 05DE BE DE 25 LDX XSTATE |
1046 * |
1047 05E1 17 FF 27 XBYTE0 LBSR INTER |
1048 05E4 28 0A BVC XBYTE1 |
1049 05E6 86 15 LDA #NAK |
1050 05E8 17 FF 51 LBSR OUTTER |
1051 05EB 8E 05 F9 LDX #XSTSTR |
1052 05EE 20 F1 BRA XBYTE0 |
1053 * |
1054 05F0 AD 84 XBYTE1 JSR ,X |
1055 05F2 26 ED BNE XBYTE0 |
1056 05F4 BF DE 25 STX XSTATE |
1057 05F7 35 90 PULS X,PC |
1058 * |
1059 * START - LOOK FOR SOH (START OF HEADER) = $01 |
1060 * |
1061 05F9 81 01 XSTSTR CMPA #SOH |
1062 05FB 26 06 BNE XSTSTR1 |
1063 05FD 8E 06 19 LDX #XSTBLK |
1064 0600 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit) |
1065 0602 39 RTS |
1066 * |
1067 0603 81 04 XSTSTR1 CMPA #EOT |
1068 0605 26 08 BNE XSTSTR2 |
1069 0607 86 06 LDA #ACK |
1070 0609 17 FF 30 LBSR OUTTER |
1071 060C 1A 05 ORCC #CFLAG+ZFLAG Set (c)=1 abort & exit |
1072 060E 39 RTS |
1073 * |
1074 060F 81 18 XSTSTR2 CMPA #CAN |
1075 0611 26 03 BNE XSTSTR3 |
1076 0613 1A 05 ORCC #CFLAG+ZFLAG Set (c)=1 abort & exit |
1077 0615 39 RTS |
1078 * |
1079 0616 1C FA XSTSTR3 ANDCC #$FF-CFLAG-ZFLAG |
1080 0618 39 RTS |
1081 * |
1082 * Got SOH |
1083 * Now get block number |
1084 * |
1085 0619 B1 DE 23 XSTBLK CMPA BLKNUM |
1086 061C 26 06 BNE XSTBLKE |
1087 061E 8E 06 2F LDX #XSTCOM |
1088 0621 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) |
1089 0623 39 RTS |
1090 * |
1091 * Error in block number |
1092 * |
1093 0624 86 15 XSTBLKE LDA #NAK |
1094 0626 17 FF 13 LBSR OUTTER |
1095 0629 8E 05 F9 LDX #XSTSTR |
1096 062C 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) |
1097 062E 39 RTS |
1098 * |
1099 * Get complement of block number |
1100 * |
1101 062F 43 XSTCOM COMA |
1102 0630 B1 DE 23 CMPA BLKNUM |
1103 0633 26 EF BNE XSTBLKE |
1104 0635 7F DE 21 CLR CHKSUM |
1105 0638 86 80 LDA #128 |
1106 063A B7 DE 24 STA BYTCNT |
1107 063D 8E 06 43 LDX #XSTDAT |
1108 0640 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) |
1109 0642 39 RTS |
1110 * |
1111 * Get data bytes |
1112 * |
1113 0643 34 02 XSTDAT PSHS A |
1114 0645 BB DE 21 ADDA CHKSUM |
1115 0648 B7 DE 21 STA CHKSUM |
1116 064B 35 02 PULS A |
1117 064D 7A DE 24 DEC BYTCNT |
1118 0650 26 03 BNE XSTDAT1 |
1119 0652 8E 06 5A LDX #XSTCHK |
1120 0655 1C FE XSTDAT1 ANDCC #$FF-CFLAG No abort |
1121 0657 1A 04 ORCC #ZFLAG Valid data (exit) |
1122 0659 39 RTS |
1123 * |
1124 * Byte count reached zero |
1125 * Check checksum byte |
1126 * |
1127 065A B1 DE 21 XSTCHK CMPA CHKSUM |
1128 065D 26 07 BNE XSTCHK1 retry if wrong checksum |
1129 * |
1130 * Checksum OK ... |
1131 * increment block number |
1132 * and send ACK |
1133 * |
1134 065F 7C DE 23 INC BLKNUM |
1135 0662 86 06 LDA #ACK |
1136 0664 20 0D BRA XSTCHK2 |
1137 * |
1138 * Checksum Error detected ... |
1139 * Reset Sector counter in ACCB to last 128 byte boundary |
1140 * and send NAK |
1141 * |
1142 0666 34 04 XSTCHK1 PSHS B |
1143 0668 1F 30 TFR U,D |
1144 066A 5A DECB |
1145 066B C4 80 ANDB #128 |
1146 066D 1F 03 TFR D,U |
1147 066F 35 04 PULS B |
1148 0671 86 15 LDA #NAK |
1149 0673 17 FE C6 XSTCHK2 LBSR OUTTER |
1150 0676 8E 05 F9 LDX #XSTSTR |
1151 0679 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit) |
1152 067B 39 RTS |
1153 * |
1154 ** 'UP' Load ROMdisk via config PROM. |
1155 * |
1156 067C 08 08 UPMES FCB $08,$08 |
1157 067E 4C 6F 61 64 20 52 FCC 'Load ROM disk from config PROM.' |
4F 4D 20 64 69 73 |
6B 20 66 72 6F 6D |
20 63 6F 6E 66 69 |
67 20 50 52 4F 4D |
2E |
1158 069D 04 FCB 4 |
1159 069E 46 6F 75 6E 64 20 UPMES1 FCC 'Found SYNC, loading data...' |
53 59 4E 43 2C 20 |
6C 6F 61 64 69 6E |
67 20 64 61 74 61 |
2E 2E 2E |
1160 06B9 0A 0D 04 FCB $0A,$0D,4 |
1161 06BC 52 4F 4D 20 44 69 UPMES2 FCC 'ROM Disk Loaded.' |
73 6B 20 4C 6F 61 |
64 65 64 2E |
1162 06CC 0A 0D 04 FCB $0A,$0D,4 |
1163 06CF 52 4F 4D 20 44 69 UPMES3 FCC 'ROM Disk Not Found.' |
73 6B 20 4E 6F 74 |
20 46 6F 75 6E 64 |
2E |
1164 06E2 0A 0D 04 FCB $0A,$0D,4 |
1165 * |
1166 06E5 8E 06 7C UPSUB LDX #UPMES |
1167 06E8 BD 04 50 JSR PDATA1 |
1168 * |
1169 06EB 8D 5A BSR UPRESET |
1170 06ED 10 8E 00 20 LDY #$0020 Set up count for 2 MBit |
1171 06F1 8E 00 00 LDX #$0000 |
1172 06F4 8D 6C UPSUB1 BSR UPBIT Shift in bit |
1173 06F6 8D 7C BSR UPSYNC Test for Sync pattern` |
1174 06F8 27 15 BEQ UPSUB4 Skip if found |
1175 06FA 30 1F LEAX -1,X Count Down inner loop |
1176 06FC 8C 00 00 CMPX #$0000 |
1177 06FF 26 F3 BNE UPSUB1 Branch if inner loop not complete |
1178 0701 31 1F LEAY -1,X Count down outer loop |
1179 0703 10 8C 00 00 CMPY #$0000 |
1180 0707 26 EB BNE UPSUB1 Branch if outer loop not complete |
1181 * |
1182 0709 8E 06 CF LDX #UPMES3 2MBits scanned, no synch, report error |
1183 070C 7E 04 50 JMP PDATA1 |
1184 * |
1185 070F 8E 06 9E UPSUB4 LDX #UPMES1 Sync found, now load disk |
1186 0712 BD 04 50 JSR PDATA1 |
1187 * |
1188 0715 4F CLRA |
1189 0716 B7 DE 1E STA DRVNUM select Drive 0 |
1190 0719 C6 01 LDB #$01 |
1191 071B B7 DE 1F UPSUB2 STA TRACK track 0 |
1192 071E F7 DE 20 STB SECTOR sector 1 |
1193 * |
1194 0721 17 F9 A3 LBSR MAPIN map in buffer |
1195 0724 5F CLRB 256 byte sector |
1196 0725 8D 67 UPSUB3 BSR UPBYTE read byte from prom |
1197 0727 A7 C0 STA ,U+ Store in buffer |
1198 0729 5A DECB |
1199 072A 26 F9 BNE UPSUB3 Loop until sector read` |
1200 072C 17 F9 CB LBSR MAPOUT map out buffer |
1201 * |
1202 072F B6 DE 1F LDA TRACK Advance sector |
1203 0732 F6 DE 20 LDB SECTOR |
1204 0735 5C INCB |
1205 0736 C1 0F CMPB #EMAXSEC+1 Wrap on max sector count |
1206 0738 26 E1 BNE UPSUB2 |
1207 073A C6 01 LDB #1 |
1208 073C 4C INCA Advance track |
1209 073D 81 30 CMPA #EMAXTRK |
1210 073F 26 DA BNE UPSUB2 |
1211 * |
1212 0741 8E 06 BC UPEXIT LDX #UPMES2 Load complete, report message |
1213 0744 7E 04 50 JMP PDATA1 |
1214 * |
1215 * Reset Serial PROM |
1216 * |
f9-monex.txt, line no. 1217: Symbol undefined Pass 2 |
1217 0747 86 00 UPRESET LDA #PRSTHI Strobe the reset line |
f9-monex.txt, line no. 1218: Symbol undefined Pass 2 |
1218 0749 97 00 STA PROMREG |
f9-monex.txt, line no. 1219: Symbol undefined Pass 2 |
1219 074B 86 00 LDA #PRSTLO |
f9-monex.txt, line no. 1220: Symbol undefined Pass 2 |
1220 074D 97 00 STA PROMREG |
1221 074F 8E 00 00 LDX #$0000 Delay a while` |
f9-monex.txt, line no. 1222: Phasing Error |
1222 0752 30 1F UPRST1 LEAX -1,X |
1223 0754 8C 00 00 CMPX #$0000 |
1224 0757 26 FB BNE UPRST1 |
1225 0759 BF DF 46 STX SYNCREG+0 Clear Sync Shift Register |
1226 075C BF DF 48 STX SYNCREG+2 |
1227 075F 39 RTS |
1228 * |
1229 * Input 1 Bit From PROM |
1230 * |
f9-monex.txt, line no. 1231: Phasing Error |
f9-monex.txt, line no. 1231: Symbol undefined Pass 2 |
1231 0760 86 00 UPBIT LDA #PCLKHI |
f9-monex.txt, line no. 1232: Symbol undefined Pass 2 |
1232 0762 97 00 STA PROMREG |
f9-monex.txt, line no. 1233: Symbol undefined Pass 2 |
1233 0764 86 00 LDA #PCLKLO |
f9-monex.txt, line no. 1234: Symbol undefined Pass 2 |
1234 0766 97 00 STA PROMREG |
f9-monex.txt, line no. 1235: Symbol undefined Pass 2 |
1235 0768 96 00 LDA PROMREG |
1236 076A 44 LSRA |
1237 076B 78 DF 49 ASL SYNCREG+3 |
1238 076E 39 RTS |
1239 * |
1240 * Test for 32 bit Sync Word |
1241 * |
f9-monex.txt, line no. 1242: Phasing Error |
1242 076F 79 DF 48 UPSYNC ROL SYNCREG+2 |
1243 0772 79 DF 47 ROL SYNCREG+1 |
1244 0775 79 DF 46 ROL SYNCREG+0 |
f9-monex.txt, line no. 1245: Symbol undefined Pass 2 |
1245 0778 CC 00 00 LDD #SYNCLO |
1246 077B 10 B3 DF 48 CMPD SYNCREG+2 |
1247 077F 26 0C BNE UPSYNCX |
f9-monex.txt, line no. 1248: Symbol undefined Pass 2 |
1248 0781 CC 00 00 LDD #SYNCHI |
1249 0784 10 B3 DF 46 CMPD SYNCREG+0 |
f9-monex.txt, line no. 1250: Phasing Error |
1250 0788 39 UPSYNCX RTS |
1251 * |
1252 * Input 1 Byte From PROM |
1253 * |
f9-monex.txt, line no. 1254: Phasing Error |
1254 0789 34 04 UPBYTE PSHS B |
1255 078B C6 08 LDB #8 |
f9-monex.txt, line no. 1256: Phasing Error |
1256 078D 8D D3 UPBYTE1 BSR UPBIT |
1257 078F 5A DECB |
1258 0790 26 00 BNE UPBYTE1 |
1259 0792 B6 DF 49 LDA SYNCREG+3 |
1260 0795 35 84 PULS B,PC |
1261 * |
1262 ***** NEXTCMD ***** |
1263 * |
f9-monex.txt, line no. 1264: Phasing Error |
1264 0797 17 FC BE NEXTEXT LBSR INPE GET ONE CHAR. FROM TERMINAL |
1265 079A 84 7F ANDA #$7F STRIP PARITY FROM CHAR. |
1266 079C 1F 89 TFR A,B |
1267 079E 86 20 LDA #$20 |
1268 07A0 17 FC B1 LBSR OUTP PRNT SPACE |
1269 07A3 C1 60 CMPB #$60 |
1270 07A5 2F 07 BLE NXTEX0 |
1271 07A7 C0 20 SUBB #$20 |
1272 * |
1273 ***** DO TABLE LOOKUP ***** |
1274 * FOR COMMAND FUNCTIONS |
1275 * |
f9-monex.txt, line no. 1276: Phasing Error |
1276 07A9 8E 07 C4 NXTEX0 LDX #EXTTAB POINT TO JUMP TABLE |
f9-monex.txt, line no. 1277: Phasing Error |
1277 07AC E1 80 NXTEX1 CMPB ,X+ DOES COMMAND MATCH TABLE ENTRY ? |
1278 07AE 27 12 BEQ JMPEXT BRANCH IF MATCH FOUND |
1279 07B0 30 02 LEAX 2,X POINT TO NEXT ENTRY IN TABLE |
1280 07B2 8C 07 D3 CMPX #EXTEND REACHED END OF TABLE YET ? |
1281 07B5 26 FA BNE NXTEX1 IF NOT END, CHECK NEXT ENTRY |
1282 07B7 8E 07 D3 LDX #MSGWHAT POINT TO MSG "WHAT?" |
1283 07BA 16 FC 93 LBRA PDATA1 PRINT MSG AND RETURN |
f9-monex.txt, line no. 1284: Phasing Error |
1284 07BD 6E 94 JMPEXT JMP [,X] JUMP TO COMMAND ROUTINE |
1285 * |
1286 * EXTENDED COMMAND JUMP TABLE |
1287 * |
f9-monex.txt, line no. 1288: Phasing Error |
1288 07BF EXTTAB EQU * |
1289 07BF 42 FCC 'B' BOOT FLEX |
1290 07C0 03 FB FDB UBSUB |
1291 07C2 4C FCC 'L' LOAD ROM DISK OVER SERIAL PORT |
1292 07C3 04 98 FDB ULSUB |
1293 07C5 46 FCC 'F' FORMAT RAM DISK |
1294 07C6 02 D7 FDB UFSUB |
1295 07C8 50 FCC 'P' LOAD ROM DISK FROM PROM |
1296 07C9 06 E5 FDB UPSUB |
1297 07CB 58 FCC 'X' XMODEM ROM DISK UPLOAD |
1298 07CC 05 8B FDB UXSUB |
1299 * |
f9-monex.txt, line no. 1300: Phasing Error |
1300 07CE EXTEND EQU * |
1301 * |
f9-monex.txt, line no. 1302: Phasing Error |
1302 07CE 57 48 41 54 20 3F MSGWHAT FCC "WHAT ?" |
1303 07D4 0A 0D 04 FCB $0A,$0D,$04 |
1304 END |
Program + Init Data = 2047 bytes |
Error count = 68 |