OpenCores
URL https://opencores.org/ocsvn/System09/System09/trunk

Subversion Repositories System09

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 2 to Rev 1
    Reverse comparison

Rev 2 → Rev 1

/trunk/rtl/vhdl/clkunit2.vhd File deleted \ No newline at end of file
/trunk/rtl/vhdl/rxunit2.vhd File deleted \ No newline at end of file
/trunk/rtl/vhdl/txunit2.vhd File deleted \ No newline at end of file
/trunk/doc/SBUG_Listing.pdf Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
trunk/doc/SBUG_Listing.pdf Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc/SBUG_UsersGuide.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/SBUG_UsersGuide.pdf =================================================================== --- trunk/doc/SBUG_UsersGuide.pdf (revision 2) +++ trunk/doc/SBUG_UsersGuide.pdf (nonexistent)
trunk/doc/SBUG_UsersGuide.pdf Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/sw/sbug_src.s19 =================================================================== --- trunk/sw/sbug_src.s19 (revision 2) +++ trunk/sw/sbug_src.s19 (nonexistent) @@ -1,65 +0,0 @@ -S123F800F814F861FDCFFDC9FDDFFDEEFDBDFDB1FDADFB818EFE4F108EDFC0C610A680A7DD -S123F820A05A26F98EE004BFDFE017027AC60C6FE25A26FB308CDDAF6A86D0A7E41F43177E -S123F84005BE8EFE5F1705758EDFD04FC60D6D8527038B04195A2AF61705268EFE7417056A -S123F8605C8EFE7B170546170565847F810D27F11F8981202C09865E1705731F988B40170B -S123F880056C170567C1602F02C0208EFE13E180270F30028CFE4F26F58EFE7D17051E207F -S123F8A0C0AD9420BC1F343B8EFE831704FF1704111704191704211704291704318EFE8375 -S123F8C01704EA17043317043A1704411604481704271705171704572902AF4A391703ED73 -S123F8E01705091704492902AF48391704001704FB17043B2902AF46391703E71704ED1720 -S123F900042D2902AF44391703CE1704DF1704302902A743391703F51704D117042229027D -S123F920A742391703DD1704C31704142902A741391703E31704B517040629048A80A7C4C1 -S123F940391703EB292D1F128EFE8317045F1F21170426170496A6A417042617048E1703D5 -S123F960DF2811810827E1811827DD815E2717810D260F39A7A4A1A4270817046F863F17FF -S123F980046C312120C2313F20BE1703351F328EDFC0301F200517038B29063420ACE12457 -S123F9A001391F10C30010C4F034061F20C4F01F01ACE42705170427270332623934108E3F -S123F9C0FE831703E8AEE41703AFC610A6801703B01704185A26F5170410AEE1C610A68021 -S123F9E081202504817E2302862E1704015A26EE20BF6FE26FE217032B3430297BAC6225D6 -S123FA00771703E81F20E3643404ABE0A7A010ACE425F110AE621F20E3643402EBE0E8A0F4 -S123FA20273C8EFE83170385303F17034C34108EFEA1170388351017014717035017033968 -S123FA408EFE87170377AE6417032E8EFE8F17036C1F988EFEA617033E170383261A10AC29 -S123FA60E425B3862B170386170374260B10AE626C6526906C64268C3266391702B1291EAB -S123FA808CDFC0241A34108EFFFF8D553510270FA684813F2709A7A0AFA4863FA7843917D8 -S123FAA0034A863F160347108EDFE3C6088D185A26FB391F43AE4A301F8D262704AF4A8D3C -S123FAC00617FDE416FD9AAE218CDFC0240AA684813F2604A6A4A78486FFA7A0A7A0A7A06C -S123FAE039108EDFE3C608A6A0ACA127045A26F739313D3986DEB7F02486FFB7F014B7F070 -S123FB0010B7F015B7F0167DF01086D8B7F020170097B6F0202BFB8609B7F02017008AB66F -S123FB20F020850126F9851026CA8EC0008D528A10B7F0401F104353FDF0008EFEFFBFF0ED -S123FB400286FFB7F01086FEB7F0148601B7F022868CB7F0208D525F34045F7DF0102A0A75 -S123FB605A26F835045A26F0208A3504B6F020851C270139C6DEF7F0248EC000AF4A1F346C -S123FB803B3436A66244444444108EDFD0E6A654545454E7E4E6A65358585858A662840FD6 -S123FBA0A762EA62E7623536393404C6205A26FD3504397DE0187FE014C6038E0000300182 -S123FBC08C000026F95A26F6860FB7E0188D37F6E018C50126F98601B7E01A8D29868CB76E -S123FBE0E0188D228EC0002009C5022705B6E01BA780F6E018C50126F0C52C2701398EC0AE -S123FC0000AF4A1F343BC6205A26FD3986111701DD7FDFE21701AD815326F91701A68139C1 -S123FC20273D813126F1170117340229261700FF29213410E6E0EBE0EBE46AE46AE4340407 -S123FC401700FD3504290C3402EBE06AE42705A78020EB5F3502C1FF27B2863F17018F7363 -S123FC60DFE286131601876FE21700B83430294AAC6225463001AFE48612170171ECE4A3C0 -S123FC80622706108300202302C620E7648EFEEB17011ACB031F981700E7AE621700DAEBB0 -S123FCA062EB63EB84A6801700D76A6426F5531F981700CDAF62ACE426C3861417012F3299 -S123FCC065398EFEAE1700F51F311600AC8EFEBA1700EAAE481600A18EFECC1700DFA643FF -S123FCE016009E8EFEC61700D4AE4416008B8EFEC01700C9AE461600808EFEB41700BEAE03 -S123FD004A20768EFED21700B4A64120748EFED71700AAA642206A8EFEDC1700A0A6C48EAE -S123FD20FEE320738D09294E1F12862D1700BF8D0F29431F018D09293D3410A76135103996 -S123FD408D112932484848481F898D0729283404ABE0398D6F8130251D8139220380303946 -S123FD60814125128146220380373981612507816622038057391A0239341035028D0235EC -S123FD80023402444444448D043502840F8B3081392F028B0720573402C608A68068E42572 -S123FDA002862D8D498D455A26F13502398D02200C34108EFE758D053510398D31A680818C -S123FDC00426F8397DDFE227068D04847F201F3410BEDFE0A684850127FAA601351039349B -S123FDE002A69FDFE085013502398D0086203412BEDFE0A684850227FA3502A701351039DE -S123FE00BEDFE08603A7848611A7846D0186FFB7DFE23901F92302F91503F93104F90710D9 -S123FE20F8CF15F8DD18F8F919F8EB42FA7B44FAF445F99647F8A54CFC0C4DF94150FC67D9 -S123FE4051F9F252F8A853F98A55FBB358FAA7FAB3F8A7F8A7F8A7F8A7FAB3FFFFFFFF00CC -S123FE6000000D0A000000532D42554720312E38202D20044B0D0A000000043E0457484159 -S123FE80543F04202D20042C205041535320042C204249545320494E204552524F523A2076 -S123FEA004203D3E20043736353433323130202053503D04202050433D04202055533D047E -S123FEC0202049593D04202049583D04202044503D042020413D042020423D042020434379 -S120FEE03A2004454648494E5A5643533104FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD -S123FF008EFFF0860FA7804A26FB86F0A7848ED0A0108E55AAEE8410AF8410AC84270B30A6 -S123FF2089F0008CF0A026ED20D6EF841F104344444444B7FFFD10CEDFC0108EDFD0A72DD9 -S123FF406F2E86F0A72F860C6FA64A2AFB3089F0008CF0A02722EE84108E55AA10AF84102E -S123FF60AC8426E9EF84108EDFD01F10444444441F89880FA7A520D586F1108EDFD0A72E26 -S123FF80860CE6A626054A2AF920146FA6E72C4F1F21E6A627046FA6E7804C810C2DF38E02 -S123FFA0FFF0C610A6A0A7805A26F953F7DFE216F8626E9FDFC06E9FDFC46E9FDFC66E9FFC -S123FFC0DFC86E9FDFCA1F43AE4AE680AF4A4F5849BEDFCC8CFFFF270F308BBCDFCE2208A0 -S123FFE03410ECC4AE446EF1371FEE426E9FDFC2FFB2FFC6FFB6FFBAFFBEFFC2FFB2FF0072 -S9030000FC Index: trunk/sw/sbug_src.txt =================================================================== --- trunk/sw/sbug_src.txt (revision 2) +++ trunk/sw/sbug_src.txt (nonexistent) @@ -1,1402 +0,0 @@ -* NAM SBUG18 MP-09 MONITOR - OPT l - PAGE -* -* MONITOR PROGRAM FOR THE SOUTHWEST TECHNICAL -* PRODUCTS MP-09 CPU BOARD AS COMMENTED BY.... -* -* ALLEN CLARK WALLACE WATSON -* 2502 REGAL OAKS LANE 4815 EAST 97th AVE. -* LUTZ, FLA. 33549 TEMPLE TERRACE, FLA. 33617 -* PH. 813-977-0347 PH. 813-985-1359 -* -* MODIFIED TO SBUG09 VER 1.8 BY: RANDY JARRETT -* 2561 NANTUCKET DR APT. E -* ATLANTA, GA 30345 -* PH. 404-320-1043 -* -* -* *** COMMANDS *** -* -* CONTROL A = ALTER THE "A" ACCUMULATOR -* CONTROL B = ALTER THE "B" ACCUMULATOR -* CONTROL C = ALTER THE CONDITION CODE REGISTER -* CONTROL D = ALTER THE DIRECT PAGE REGISTER -* CONTROL P = ALTER THE PROGRAM COUNTER -* CONTROL U = ALTER USER STACK POINTER -* CONTROL X = ALTER "X" INDEX REGISTER -* CONTROL Y = ALTER "Y" INDEX REGISTER -* B hhhh = SET BREAKPOINT AT LOCATION $hhhh -* D = BOOT A SWTPC 8 INCH FLOPPY SYSTEM -* U = BOOT A SWTPC 5 INCH FLOPPY SYSTEM -* E ssss-eeee = EXAMINE MEMORY FROM STARTING ADDRESS ssss -* -TO ENDING ADDRESS eeee. -* G = CONTINUE EXECUTION FROM BREAKPOINT OR SWI -* L = LOAD TAPE -* M hhhh = EXAMINE AND CHANGE MEMORY LOCATION hhhh -* P ssss-eeee = PUNCH TAPE, START ssss TO END eeee ADDR. -* Q ssss-eeee = TEST MEMORY FROM ssss TO eeee -* R = DISPLAY REGISTER CONTENTS -* S = DISPLAY STACK FROM ssss TO $DFC0 -* X = REMOVE ALL BREAKPOINTS -* -* -TSTPAT EQU $55AA TEST PATTERN -* -* -* - ORG $DFC0 -STACK RMB 2 TOP OF INTERNAL STACK / USER VECTOR -SWI3 RMB 2 SOFTWARE INTERRUPT VECTOR #3 -SWI2 RMB 2 SOFTWARE INTERRUPT VECTOR #2 -FIRQ RMB 2 FAST INTERRUPT VECTOR -IRQ RMB 2 INTERRUPT VECTOR -SWI RMB 2 SOFTWARE INTERRUPT VECTOR -SVCVO RMB 2 SUPERVISOR CALL VECTOR ORGIN -SVCVL RMB 2 SUPERVISOR CALL VECTOR LIMIT -LRARAM RMB 16 LRA ADDRESSES -CPORT RMB 2 RE-VECTORABLE CONTROL PORT -ECHO RMB 1 ECHO FLAG -BPTBL RMB 24 BREAKPOINT TABLE BASE ADDR -ACIAS EQU $E004 CONTROL PORT -Comreg EQU $E018 COMMAND REGISTER -Drvreg EQU $E014 DRIVE REGISTER -Secreg EQU $E01A SECTOR REGISTER -Datreg EQU $E01B DATA REGISTER -* -ADDREG EQU $F000 ADDRESS REGISTER -CNTREG EQU $F002 COUNT REGISTER -CCREG EQU $F010 CHANNEL CONTROL REGISTER -PRIREG EQU $F014 DMA PRIORITY REGISTER -AAAREG EQU $F015 ??? -BBBREG EQU $F016 ??? -COMREG EQU $F020 1791 COMMAND REGISTER -SECREG EQU $F022 SECTOR REGISTER -DRVREG EQU $F024 DRIVE SELECT LATCH -CCCREG EQU $F040 ??? -* -IC11 EQU $FFF0 DAT RAM CHIP -* - ORG $F800 - FDB MONITOR - FDB NEXTCMD - FDB INCH - FDB INCHE - FDB INCHEK - FDB OUTCH - FDB PDATA - FDB PCRLF - FDB PSTRNG - FDB LRA -* -* MONITOR -* -* VECTOR ADDRESS STRING IS..... -* $F8A1-$F8A1-$F8A1-$F8A1-$F8A1-$FAB0-$FFFF-$FFFF -* -MONITOR LDX #RAMVEC POINT TO VECTOR ADDR. STRING - LDY #STACK POINT TO RAM VECTOR LOCATION - LDB #$10 BYTES TO MOVE = 16 -LOOPA LDA ,X+ GET VECTOR BYTE - STA ,Y+ PUT VECTORS IN RAM / $DFC0-$DFCF - DECB SUBTRACT 1 FROM NUMBER OF BYTES TO MOVE - BNE LOOPA CONTINUE UNTIL ALL VECTORS MOVED -* -* CONTENTS FROM TO FUNCTION -* $F8A1 $FE40 $DFC0 USER-V -* $F8A1 $FE42 $DFC2 SWI3-V -* $F8A1 $FE44 $DFC4 SWI2-V -* $F8A1 $FE46 $DFC6 FIRQ-V -* $F8A1 $FE48 $DFC8 IRQ-V -* $FAB0 $FE4A $DFCA SWI-V -* $FFFF $FE4C $DFCC SVC-VO -* $FFFF $FE4E $DFCE SVC-VL -* - LDX #ACIAS GET CONTROL PORT ADDR. - STX CPORT STORE ADDR. IN RAM - LBSR XBKPNT CLEAR OUTSTANDING BREAKPOINTS - LDB #12 CLEAR 12 BYTES ON STACK -CLRSTK CLR ,-S - DECB - BNE CLRSTK - LEAX MONITOR,PCR SET PC TO SBUG-E ENTRY - STX 10,S ON STACK - LDA #$D0 PRESET CONDITION CODES ON STACK - STA ,S - TFR S,U - LBSR ACINIZ INITIALIZE CONTROL PORT - LDX #MSG1 POINT TO 'SBUG 1.8' MESSAGE - LBSR PDATA PRINT MSG - LDX #LRARAM POINT TO LRA RAM STORAGE AREA - CLRA START TOTAL AT ZERO - LDB #13 TOTAL UP ALL ACTIVE RAM MEMORY -FNDREL TST B,X TEST FOR RAM AT NEXT LOC. - BEQ RELPAS IF NO RAM GO TO NEXT LOC. - ADDA #4 ELSE ADD 4K TO TOTAL - DAA ADJ. TOTAL FOR DECIMAL -RELPAS DECB SUB. 1 FROM LOCS. TO TEST - BPL FNDREL PRINT TOTAL OF RAM - LBSR OUT2H OUTPUT HEX BYTE AS ASCII - LDX #MSG2 POINT TO MSG 'K' CR/LF + 3 NULS - LBSR PDATA PRINT MSG -* -***** NEXTCMD ***** -* -NEXTCMD LDX #MSG3 POINT TO MSG ">" - LBSR PSTRNG PRINT MSG - LBSR INCH GET ONE CHAR. FROM TERMINAL - ANDA #$7F STRIP PARITY FROM CHAR. - CMPA #$0D IS IT CARRIAGE RETURN ? - BEQ NEXTCMD IF CR THEN GET ANOTHER CHAR. - TFR A,B PUT CHAR. IN "B" ACCUM. - CMPA #$20 IS IT CONTROL OR DATA CHAR ? - BGE PRTCMD IF CMD CHAR IS DATA, PRNT IT - LDA #'^ ELSE CNTRL CHAR CMD SO... - LBSR OUTCH PRINT "^" - TFR B,A RECALL CNTRL CMD CHAR - ADDA #$40 CONVERT IT TO ASCII LETTER -PRTCMD LBSR OUTCH PRNT CMD CHAR - LBSR OUT1S PRNT SPACE - CMPB #$60 - BLE NXTCH0 - SUBB #$20 -* -* -***** DO TABLE LOOKUP ***** -* FOR COMMAND FUNCTIONS -* -* -NXTCH0 LDX #JMPTAB POINT TO JUMP TABLE -NXTCHR CMPB ,X+ DOES COMMAND MATCH TABLE ENTRY ? - BEQ JMPCMD BRANCH IF MATCH FOUND - LEAX 2,X POINT TO NEXT ENTRY IN TABLE - CMPX #TABEND REACHED END OF TABLE YET ? - BNE NXTCHR IF NOT END, CHECK NEXT ENTRY - LDX #MSG4 POINT TO MSG "WHAT?" - LBSR PDATA PRINT MSG - BRA NEXTCMD IF NO MATCH, PRMPT FOR NEW CMD -JMPCMD JSR [,X] JUMP TO COMMAND ROUTINE - BRA NEXTCMD PROMPT FOR NEW COMMAND -* -* "G" GO OR CONTINUE -* -GO TFR U,S -RTI RTI -* -* "R" DISPLAY REGISTERS -* -REGSTR LDX #MSG5 POINT TO MSG " - " - LBSR PSTRNG PRINT MSG - LBSR PRTSP $FCBF - LBSR PRTUS $FCCA - LBSR PRTDP $FCD5 - LBSR PRTIX $FCE0 - LBSR PRTIY $FCEB - LDX #MSG5 POINT TO MSG " - " - LBSR PSTRNG PRINT MSG - LBSR PRTPC $FCF5 - LBSR PRTA $FCFF - LBSR PRTB $FD09 - LBRA PRTCC $FD13 -* -* -* ALTER "PC" PROGRAM COUNTER -* -* -ALTRPC LBSR PRTPC $FCF5 PRINT MSG " PC = " - LBSR OUT1S OUTPUT SPACE - LBSR IN1ADR GET NEW CONTENTS FOR "PC" - BVS ALTPCD EXIT IF INVALID HEX - STX 10,U POKE IN NEW CONTENTS -ALTPCD RTS ; -* -* -* ALTER "U" USER STACK POINTER -* -* -ALTRU LBSR PRTUS $FCCA PRINT MSG " US = " - LBSR OUT1S OUTPUT SPACE - LBSR IN1ADR - BVS ALTUD - STX 8,U -ALTUD RTS ; -* -* -* ALTER "Y" INDEX REGISTER -* -* -ALTRY LBSR PRTIY PRINT MSG " IY = " - LBSR OUT1S OUTPUT SPACE - LBSR IN1ADR - BVS ALTYD - STX 6,U $F8F0 -ALTYD RTS ; -* -* -* ALTER "X" INDEX REGISTER -* -* -ALTRX LBSR PRTIX $FCE0 PRINT MSG " IX = " - LBSR OUT1S OUTPUT SPACE - LBSR IN1ADR - BVS ALTXD - STX 4,U -ALTXD RTS ; -* -* -* ALTER "DP" DIRECT PAGE REGISTER -* -* -ALTRDP LBSR PRTDP $FCD5 PRINT MSG " DP = " - LBSR OUT1S OUTPUT SPACE - LBSR BYTE INPUT BYTE (2 HEX CHAR) - BVS ALTDPD - STA 3,U -ALTDPD RTS ; -* -* -* ALTER "B" ACCUMULATOR -* -* -ALTRB LBSR PRTB $FD09 PRINT MSG " B = " - LBSR OUT1S OUTPUT SPACE - LBSR BYTE INPUT BYTE (2 HEX CHAR) - BVS ALTBD - STA 2,U -ALTBD RTS $F91C -* -* -* ALTER "A" ACCUMULATOR -* -* -ALTRA LBSR PRTA $FCFF RINT MSG " A = " - LBSR OUT1S OUTPUT SPACE - LBSR BYTE INPUT BYTE (2 HEX CHAR) - BVS ALTAD - STA 1,U -ALTAD RTS ; -* -* -* ALTER "CC" REGISTER -* -* -ALTRCC LBSR PRTCC $FD13 PRINT MSG " CC: " - LBSR OUT1S OUTPUT SPACE - LBSR BYTE INPUT BYTE (2 HEX CHAR) - BVS ALTCCD - ORA #$80 SETS "E" FLAG IN PRINT LIST - STA ,U -ALTCCD RTS ; -* -***** "M" MEMORY EXAMINE AND CHANGE ***** -* -MEMCHG LBSR IN1ADR INPUT ADDRESS - BVS CHRTN IF NOT HEX, RETURN - TFR X,Y SAVE ADDR IN "Y" -MEMC2 LDX #MSG5 POINT TO MSG " - " - LBSR PSTRNG PRINT MSG - TFR Y,X FETCH ADDRESS - LBSR OUT4H PRINT ADDR IN HEX - LBSR OUT1S OUTPUT SPACE - LDA ,Y GET CONTENTS OF CURRENT ADDR. - LBSR OUT2H OUTPUT CONTENTS IN ASCII - LBSR OUT1S OUTPUT SPACE - LBSR BYTE LOOP WAITING FOR OPERATOR INPUT - BVC CHANGE IF VALID HEX GO CHANGE MEM. LOC. - CMPA #8 IS IT A BACKSPACE (CNTRL H)? - BEQ MEMC2 PROMPT OPERATOR AGAIN - CMPA #$18 IS IT A CANCEL (CNTRL X)? - BEQ MEMC2 PROMPT OPERATOR AGAIN - CMPA #'^ IS IT AN UP ARROW? - BEQ BACK DISPLAY PREVIOUS BYTE - CMPA #$D IS IT A CR? - BNE FORWRD DISPLAY NEXT BYTE -CHRTN RTS EXIT ROUTINE -* -* -CHANGE STA ,Y CHANGE BYTE IN MEMORY - CMPA ,Y DID MEMORY BYTE CHANGE? - BEQ FORWRD $F972 - LBSR OUT1S OUTPUT SPACE - LDA #'? LOAD QUESTION MARK - LBSR OUTCH PRINT IT -FORWRD LEAY 1,Y POINT TO NEXT HIGHER MEM LOCATION - BRA MEMC2 PRINT LOCATION & CONTENTS -BACK LEAY -1,Y POINT TO LAST MEM LOCATION - BRA MEMC2 PRINT LOCATION & CONTENTS -* -* "S" DISPLAY STACK -* HEX-ASCII DISPLAY OF CURRENT STACK CONTENTS FROM -** CURRENT STACK POINTER TO INTERNAL STACK LIMIT. -* -DISSTK LBSR PRTSP PRINT CURRENT STACK POINTER - TFR U,Y - LDX #STACK LOAD INTERNAL STACK AS UPPER LIMIT - LEAX -1,X POINT TO CURRENT STACK - BRA MDUMP1 ENTER MEMORY DUMP OF STACK CONTENTS -* -* "E" DUMP MEMORY FOR EXAMINE IN HEX AND ASCII -* AFTER CALLING 'IN2ADR' LOWER ADDRESS IN Y-REG. -* UPPER ADDRESS IN X-REG. -* IF HEX ADDRESSES ARE INVALID (V)=1. -* -MEMDUMP LBSR IN2ADR INPUT ADDRESS BOUNDRIES - BVS EDPRTN NEW COMMAND IF ILLEGAL HEX -MDUMP1 PSHS Y COMPARE LOWER TO UPPER BOUNDS - CMPX ,S++ LOWER BOUNDS > UPPER BOUNDS? - BCC AJDUMP IF NOT, DUMP HEX AND ASCII -EDPRTN RTS ; -* -* ADJUST LOWER AND UPPER ADDRESS LIMITS -* TO EVEN 16 BYTE BOUNDRIES. -* -* IF LOWER ADDR = $4532 -* LOWER BOUNDS WILL BE ADJUSTED TO = $4530. -* -* IF UPPER ADDR = $4567 -* UPPER BOUNDS WILL BE ADJUSTED TO = $4570. -* -* ENTER WITH LOWER ADDRESS IN X-REG. -* -UPPER ADDRESS ON TOP OF STACK. -* -AJDUMP TFR X,D GET UPPER ADDR IN D-REG - ADDD #$10 ADD 16 TO UPPER ADDRESS - ANDB #$F0 MASK TO EVEN 16 BYTE BOUNDRY - PSHS A,B SAVE ON STACK AS UPPER DUMP LIMIT - TFR Y,D $F9A5 GET LOWER ADDRESS IN D-REG - ANDB #$F0 MASK TO EVEN 16 BYTE BOUNDRY - TFR D,X PUT IN X-REG AS LOWER DUMP LIMIT -NXTLIN CMPX ,S COMPARE LOWER TO UPPER LIMIT - BEQ SKPDMP IF EQUAL SKIP HEX-ASCII DUMP - LBSR INCHEK CHECK FOR INPUT FROM KEYBOARD - BEQ EDUMP IF NONE, CONTINUE WITH DUMP -SKPDMP LEAS 2,S READJUST STACK IF NOT DUMPING - RTS ; -* -* PRINT 16 HEX BYTES FOLLOWED BY 16 ASCII CHARACTERS -* FOR EACH LINE THROUGHOUT ADDRESS LIMITS. -* -EDUMP PSHS X PUSH LOWER ADDR LIMIT ON STACK - LDX #MSG5 POINT TO MSG " - " - LBSR PSTRNG PRINT MSG - LDX ,S LOAD LOWER ADDR FROM TOP OF STACK - LBSR OUT4H PRINT THE ADDRESS LBSR OUT2S PRINT 2 SPACES - LDB #$10 LOAD COUNT OF 16 BYTES TO DUMP -ELOOP LDA ,X+ GET FROM MEMORY HEX BYTE TO PRINT - LBSR OUT2H OUTPUT HEX BYTE AS ASCII - LBSR OUT1S OUTPUT SPACE - DECB $F9D1 DECREMENT BYTE COUNT - BNE ELOOP CONTINUE TIL 16 HEX BYTES PRINTED -* -* PRINT 16 ASCII CHARACTERS -* IF NOT PRINTABLE OR NOT VALID -* ASCII PRINT A PERIOD (.) - LBSR OUT2S 2 SPACES - LDX ,S++ GET LOW LIMIT FRM STACK - ADJ STACK - LDB #$10 SET ASCII CHAR TO PRINT = 16 -EDPASC LDA ,X+ GET CHARACTER FROM MEMORY - CMPA #$20 IF LESS THAN $20, NON-PRINTABLE? - BCS PERIOD IF SO, PRINT PERIOD INSTEAD - CMPA #$7E IS IT VALID ASCII? - BLS PRASC IF SO PRINT IT -PERIOD LDA #'. LOAD A PERIOD (.) -PRASC LBSR OUTCH PRINT ASCII CHARACTER - DECB DECREMENT COUNT - BNE EDPASC - BRA NXTLIN -* -***** "Q" MEMORY TEST ***** -* -MEMTST CLR ,-S CLEAR BYTE ON STACK - CLR ,-S CLEAR ANOTHER BYTE - LBSR IN2ADR GET BEGIN(Y) & END(X) ADDR. LIMITS - PSHS X,Y SAVE ADDRESSES ON STACK - BVS ADJSK6 EXIT IF NOT VALID HEX - CMPX 2,S COMPARE BEGIN TO END ADDR. - BCS ADJSK6 EXIT IF BEGIN > END ADDR. - LBSR OUT1S OUTPUT SPACE -MEMSET TFR Y,D PUT BEGIN ADDR. IN 'D'-ACCUM. - ADDD 4,S ADD PASS COUNT TO BEGIN ADDR - PSHS B ADD LS BYTE TO MS BYTE OF BEGIN ADDR - ADDA ,S+ - STA ,Y+ SAVE THIS DATA BYTE AT BEGIN ADDR - CMPY ,S COMPARE END TO BEGIN ADDR - BCS MEMSET IF BEGIN LOWER, CONTINUE TO SET MEMORY - LDY 2,S RELOAD BEGIN ADDRESS -TEST1 TFR Y,D PUT BEGIN ADDR IN 'D'-ACC. - ADDD 4,S ADD PASS COUNT TO ADDRESS - PSHS A ADD MS BYTE TO LS BYTE OF ADDRESS - ADDB ,S+ - EORB ,Y+ EX-OR THIS DATA WITH DATA IN MEMORY LOC. - BEQ GUDPAS IF (Z) SET, MEMORY BYTE OK - LDX #MSG5 POINT TO MSG " - " - LBSR PSTRNG PRINT MSG - LEAX -1,Y GET ERROR ADDRESS IN X-REG - LBSR OUT4H OUTPUT IT - PSHS X PUSH ERROR ADDR ON STACK - LDX #MSG8 POINT TO MSG " =>" - LBSR PDATA PRINT MSG - PULS X POP ERROR ADDR FROM STACK - LBSR LRA GET PHYSICAL ADDR FROM LRA - LBSR XASCII OUTPUT EXTENDED 4 BITS OF PHYSICAL ADDR - LBSR OUT4H OUTPUT LS 16 BITS OF PHYSICAL ADDR - LDX #MSG6 POINT TO MSG ", PASS " - LBSR PDATA PRINT MSG - LDX 4,S LOAD PASS COUNT - LBSR OUT4H OUTPUT IT - LDX #MSG7 POINT TO MSG ", BITS IN ERROR - LBSR PDATA PRINT MSG - TFR B,A GET ERROR BYTE INTO A-ACC - LDX #MSG9 POINT TO MSG "76543210" - LBSR BIASCI OUTPUT IN BINARY/ASCII FORMAT - LBSR INCHEK CHECK FOR INPUT FROM KEYBOARD $FA56 - BNE ADJSK6 IF SO, EXIT MEMORY TEST -GUDPAS CMPY ,S COMPARE END ADDR TO BEGIN ADDR - BCS TEST1 - LDA #'+ GET "PASS" SYMBOL IF MEMORY PASS OK - LBSR OUTCH OUTPUT SYMBOL TO TERMINAL - LBSR INCHEK INPUT FROM KEYBOARD? - BNE ADJSK6 IF SO, EXIT MEMORY TEST - LDY 2,S LOAD BEGIN ADDRESS - INC 5,S INCREMENT LS BYTE OF PASS COUNT - BNE MEMSET IF NOT ZERO, SET NEXT MEMORY BYTE - INC 4,S INCREMENT MS BYTE OF PASS COUNT - BNE MEMSET DONE WITH 65,535 PASSES OF MEMORY? -ADJSK6 LEAS 6,S ADJ STACK POINTER BY 6 - RTS -* -***** "B" SET BREAKPOINT ***** -* -BRKPNT LBSR IN1ADR GET BREAKPOINT ADDRESS - BVS EXITBP EXIT IF INVALID HEX ADDR. - CMPX #STACK ADDRESS ILLEGAL IF >=$DFC0 - BCC BPERR IF ERROR PRINT (?), EXIT - PSHS X $FA82 PUSH BP ADDRESS ON STACK - LDX #$FFFF LOAD DUMMY ADDR TO TEST BP TABLE - BSR BPTEST TEST BP TABLE FOR FREE SPACE - PULS X POP BP ADDRESS FROM STACK - BEQ BPERR (Z) SET, OUT OF BP TABLE SPACE - LDA ,X GET DATA AT BREAKPOINT ADDRESS - CMPA #$3F IS IT A SWI? - BEQ BPERR IF SWI ALREADY, INDICATE ERROR - STA ,Y+ SAVE DATA BYTE IN BP TABLE - STX ,Y SAVE BP ADDRESS IN BP TABLE - LDA #$3F LOAD A SWI ($3F) - STA ,X SAVE SWI AT BREAKPOINT ADDRESS -EXITBP RTS ; -* -* INDICATE ERROR SETTING BREAKPOINT -* -BPERR LBSR OUT1S OUTPUT SPACE - LDA #'? LOAD (?), INDICATE BREAKPOINT ERROR - LBRA OUTCH PRINT "?" -* -*** "X" CLEAR OUTSTANDING BREAKPOINTS *** -* -XBKPNT LDY #BPTBL POINT TO BREAKPOINT TABLE - LDB #8 LOAD BREAKPOINT COUNTER -XBPLP BSR RPLSWI REMOVE USED ENTRY IN BP TABLE - DECB $FAAC DECREMENT BP COUNTER - BNE XBPLP END OF BREAKPOINT TABLE? - RTS -* -***** SWI ENTRY POINT ***** -* -SWIE TFR S,U TRANSFER STACK TO USER POINTER - LDX 10,U LOAD PC FROM STACK INTO X-REG - LEAX -1,X ADJUST ADDR DOWN 1 BYTE. - BSR BPTEST FIND BREAKPOINT IN BP TABLE - BEQ REGPR IF FOUND, REPLACE DATA AT BP ADDR - STX 10,U SAVE BREAKPOINT ADDR IN STACK - BSR RPLSWI GO REPLACE SWI WITH ORIGINAL DATA -REGPR LBSR REGSTR GO PRINT REGISTERS - LBRA NEXTCMD GET NEXT COMMAND -RPLSWI LDX 1,Y LOAD BP ADDRESS FROM BP TABLE - CMPX #STACK COMPARE TO TOP AVAILABLE USER MEMORY - BCC FFSTBL GO RESET TABLE ENTRY TO $FF'S - LDA ,X GET DATA FROM BP ADDRESS - CMPA #$3F IS IT SWI? - BNE FFSTBL IF NOT, RESET TABLE ENTRY TO $FF'S - LDA ,Y GET ORIGINAL DATA FROM BP TABLE - STA ,X $FAD3 RESTORE DATA AT BP ADDRESS -FFSTBL LDA #$FF LOAD $FF IN A-ACC - STA ,Y+ RESET BREAKPOINT TABLE DATA TO $FF'S - STA ,Y+ RESET BREAKPOINT TABLE ADDR TO $FF'S - STA ,Y+ - RTS -* -** SEARCH BREAKPOINT TABLE FOR MATCH ** -* -BPTEST LDY #BPTBL POINT TO BREAKPOINT TABLE - LDB #8 LOAD BREAKPOINT COUNTER -FNDBP LDA ,Y+ LOAD DATA BYTE - CMPX ,Y++ COMPARE ADDRESS, IS IT SAME? - BEQ BPADJ IF SO, ADJUST POINTER FOR TABLE ENTRY - DECB IF NOT, DECREMENT BREAKPOINT COUNTER - BNE FNDBP AND LOOK FOR NEXT POSSIBLE MATCH - RTS ; -* -* -BPADJ LEAY -3,Y MOVE POINTER TO BEGIN OF BP ENTRY - RTS -* -*** "D" DISK BOOT FOR DMAF2 *** -* -DBOOT LDA #$DE - STA DRVREG - LDA #$FF - STA PRIREG $FAF8 - STA CCREG - STA AAAREG - STA BBBREG - TST CCREG - LDA #$D8 - STA COMREG - LBSR DLY -DBOOT0 LDA COMREG - BMI DBOOT0 - LDA #$09 - STA COMREG - LBSR DLY -* -DISKWT LDA COMREG FETCH DRIVE STATUS - BITA #1 TEST BUSY BIT - BNE DISKWT LOOP UNTIL NOT BUSY -* - BITA #$10 - BNE DBOOT -* - LDX #$C000 LOGICAL ADDR. = $C000 - BSR LRA GET 20 BIT PHYSICAL ADDR. OF LOG. ADDR. - ORA #$10 - STA CCCREG - TFR X,D - COMA ; - COMB ; - STD ADDREG - LDX #$FEFF LOAD DMA BYTE COUNT = $100 - STX CNTREG STORE IN COUNT REGISTER - LDA #$FF LOAD THE CHANNEL REGISTER - STA CCREG - LDA #$FE SET CHANNEL 0 - STA PRIREG - LDA #1 SET SECTOR TO "1" - STA SECREG ISSUE COMMAND - LDA #$8C SET SINGLE SECTOR READ - STA COMREG ISSUE COMMAND - BSR DLY -* -* THE FOLLOWING CODE TESTS THE STATUS OF THE -* CHANNEL CONTROL REGISTER. IF "D7" IS NOT -* ZERO THEN IT WILL LOOP WAITING FOR "D7" -* TO GO TO ZERO. IF AFTER 65,536 TRIES IT -* IS STILL A ONE THE BOOT OPERATION WILL -* BE STARTED OVER FROM THE BEGINING. -* - CLRB ; -DBOOT1 PSHS B $FB55 - CLRB ; -DBOOT2 TST CCREG - BPL DBOOT3 - DECB ; - BNE DBOOT2 - PULS B - DECB - BNE DBOOT1 - BRA DBOOT -DBOOT3 PULS B - LDA COMREG - BITA #$1C - BEQ DBOOT4 - RTS ; -* -* -DBOOT4 LDB #$DE - STB DRVREG - LDX #$C000 - STX 10,U - TFR U,S $FB7B - RTI ; -* -***** LRA LOAD REAL ADDRESS ***** -* -* THE FOLLOWING CODE LOADS THE 20-BIT -* PHYSICAL ADDRESS OF A MEMORY BYTE -* INTO THE "A" AND "X" REGISTERS. THIS -* ROUTINE IS ENTERED WITH THE LOGICAL -* ADDRESS OF A MEMORY BYTE IN THE "IX" -* REGISTER. EXIT IS MADE WITH THE HIGH- -* ORDER FOUR BITS OF THE 20-BIT PHYSICAL -* ADDRESS IN THE "A" REGISTER, AND THE -* LOW-ORDER 16-BITS OF THE 20-BIT -* PHYSICAL ADDRESS IN THE "IX" REGISTER. -* ALL OTHER REGISTERS ARE PRESERVED. -* THIS ROUTINE IS REQUIRED SINCE THE -* DMAF1 AND DMAF2 DISK CONTROLLERS MUST -* PRESENT PHYSICAL ADDRESSES ON THE -* SYSTEM BUS. -* -LRA PSHS A,B,X,Y PUSH REGISTERS ON STACK - LDA 2,S GET MSB LOGICAL ADDR FRM X REG ON STACK - LSRA ; - LSRA ADJ FOR INDEXED INTO - LSRA CORRESPONDING LOCATION - LSRA IN LRA TABLE - LDY #LRARAM LOAD LRA TABLE BASE ADDRESS - LDB A,Y GET PHYSICAL ADDR. DATA FROM LRA TABLE - LSRB ADJ. REAL ADDR. TO REFLECT EXTENDED - LSRB PHYSICAL ADDRESS. - LSRB EXTENDED MS 4-BITS ARE RETURNED - LSRB IN THE "A" ACCUMULATOR - STB ,S MS 4 BITS IN A ACCUM. STORED ON STACK - LDB A,Y LOAD REAL ADDRESS DATA FROM LRA TABLE - COMB COMP TO ADJ FOR PHYSICAL ADDR. IN X REG - ASLB ADJ DATA FOR RELOCATION IN X REG - ASLB ; - ASLB $FB97 - ASLB ; - LDA 2,S GET MS BYTE OF LOGICAL ADDR. - ANDA #$0F MASK MS NIBBLE OF LOGICAL ADDRESS - STA 2,S SAVE IT IN X REG ON STACK - ORB 2,S SET MS BYTE IN X REG TO ADJ PHY ADDR. -* -* PLUS LS NIBBLE OF LOGICAL ADDRESS - STB 2,S SAVE AS LS 16 BITS OF PHY ADDR IN X REG -* ON STACK - PULS A,B,X,Y POP REGS. FROM STACK - RTS ; -* -* DELAY LOOP -* -DLY PSHS B SAVE CONTENTS OF "B" - LDB #$20 GET LOOP DELAY VALUE -SUB1 DECB SUBTRACT ONE FROM VALUE - BNE SUB1 LOOP UNTIL ZERO - PULS B RESTORE CONTENTS OF "B" - RTS ; -* -***** "U" MINIDISK BOOT ***** -* -MINBOOT TST Comreg - CLR Drvreg SELECT DRIVE 0 -* -* DELAY BEFORE ISSUING RESTORE COMMAND - LDB #3 - LDX #0 -LOOP LEAX 1,X $FBBB - CMPX #0 - BNE LOOP - DECB $FBC2 - BNE LOOP -* - LDA #$0F *LOAD HEAD, VERIFY, 20msec/step - STA Comreg ISSUE RESTORE COMMAND - BSR DELAY -LOOP1 LDB Comreg $FBCC - BITB #1 - BNE LOOP1 LOOP UNTIL THRU - LDA #1 - STA Secreg SET SECTOR REGISTER TO ONE - BSR DELAY - LDA #$8C LOAD HEAD, DELAY 10msec, - STA Comreg AND READ SINGLE RECORD - BSR DELAY - LDX #$C000 - BRA LOOP3 -* -LOOP2 BITB #2 $FBE6 DRQ? - BEQ LOOP3 - LDA Datreg - STA ,X+ -* -LOOP3 LDB Comreg FETCH STATUS - BITB #1 BUSY? - BNE LOOP2 - BITB #$2C CRC ERROR OR LOST DATA? - BEQ LOOP4 - RTS ; -LOOP4 LDX #$C000 $FBFB - STX 10,U - TFR U,S - RTI ; -* -* DELAY -* -DELAY LDB #$20 -LOOP5 DECB ; - BNE LOOP5 - RTS ; -* -***** "L" LOAD MIKBUG TAPE ***** -* -LOAD LDA #$11 LOAD 'DC1' CASS. READ ON CODE - LBSR OUTCH OUTPUT IT TO TERMINAL PORT - CLR ECHO TURN OFF ECHO FLAG -LOAD1 LBSR ECHON INPUT 8 BIT BYTE WITH NO ECHO -LOAD2 CMPA #'S IS IT AN "S", START CHARACTER ? - BNE LOAD1 IF NOT, DISCARD AND GET NEXT CHAR. - LBSR ECHON - CMPA #'9 IS IT A "9" , END OF FILE CHAR ? - BEQ LOAD21 IF SO, EXIT LOAD - CMPA #'1 IS IT A "1" , FILE LOAD CHAR ? - BNE LOAD2 IF NOT, LOOK FOR START CHAR. - LBSR BYTE INPUT BYTE COUNT - PSHS A PUSH COUNT ON STACK - BVS LODERR (V) C-CODE SET, ILLEGAL HEX - LBSR IN1ADR INPUT LOAD ADDRESS - BVS LODERR (V) C-CODE SET, ADDR NOT HEX - PSHS X PUSH ADDR ON STACK - LDB ,S+ LOAD MSB OF ADDR AS CHECKSUM BYTE - ADDB ,S+ ADD LSB OF ADDR TO CHECKSUM - ADDB ,S ADD BYTE COUNT BYTE TO CHECKSUM - DEC ,S $FC37 DECREMENT BYTE COUNT 2 TO BYPASS - DEC ,S ADDRESS BYTES. -LOAD10 PSHS B PUSH CHECKSUM ON STACK - LBSR BYTE INPUT DATA BYTE (2 HEX CHAR) - PULS B POP CHECKSUM FROM STACK - BVS LODERR (V) SET, DATA BYTE NOT HEX - PSHS A PUSH DATA BYTE ON STACK - ADDB ,S+ ADD DATA TO CHECKSUM, AUTO INC STACK - DEC ,S DECREMENT BYTE COUNT 1 - BEQ LOAD16 IF BYTE COUNT ZERO, TEST CHECKSUM - STA ,X+ SAVE DATA BYTE IN MEMORY - BRA LOAD10 GET NEXT DATA BYTE -LODERR CLRB ;ERROR CONDITION, ZERO CHECKSUM ; -LOAD16 PULS A ADJUST STACK (REMOVE BYTE COUNT) - CMPB #$FF CHECKSUM OK? - BEQ LOAD IF SO, LOAD NEXT LINE - LDA #'? LOAD (?) ERROR INDICATOR - LBSR OUTCH OUTPUT IT TO TERMINAL -LOAD21 COM ECHO TURN ECHO ON - LDA #$13 $FC5F LOAD 'DC3' CASS. READ OFF CODE - LBRA OUTCH OUTPUT IT -* -***** "P" PUNCH MIKBUG TAPE ***** -* -PUNCH CLR ,-S CLEAR RESERVED BYTE ON STACK - LBSR IN2ADR GET BEGIN AND END ADDRESS - PSHS X,Y SAVE ADDRESSES ON STACK - BVS PUNEXT (V) C-CODE SET, EXIT PUNCH - CMPX 2,S COMPARE BEGIN TO END ADDR - BCS PUNEXT IF BEGIN GREATER THAN END, EXIT PUNCH - LEAX 1,X INCREMENT END ADDRESS - STX ,S STORE END ADDR ON STACK - LDA #$12 LOAD 'DC2' PUNCH ON CODE - LBSR OUTCH OUTPUT IT TO TERMINAL -PUNCH2 LDD ,S LOAD END ADDR IN D-ACC - SUBD 2,S SUBTRACT BEGIN FROM END - BEQ PUNCH3 SAME, PUNCH 32 BYTES DEFAULT - CMPD #$20 LESS THAN 32 BYTES? - BLS PUNCH4 PUNCH THAT MANY BYTES -PUNCH3 LDB #$20 LOAD BYTE COUNT OF 32. -PUNCH4 STB 4,S STORE ON STACK AS BYTE COUNT - LDX #MSG20 POINT TO MSG "S1" - LBSR PSTRNG PRINT MSG - ADDB #3 ADD 3 BYTES TO BYTE COUNT - TFR B,A GET BYTE COUNT IN A-ACC TO PUNCH - LBSR OUT2H OUTPUT BYTE COUNT - LDX 2,S LOAD BEGIN ADDRESS - LBSR OUT4H PUNCH ADDRESS - ADDB 2,S ADD ADDR MSB TO CHECKSUM - ADDB 3,S ADD ADDR LSB TO CHECKSUM -PUNCHL ADDB ,X ADD DATA BYTE TO CHECKSUM - LDA ,X+ LOAD DATA BYTE TO PUNCH - LBSR OUT2H OUTPUT DATA BYTE - DEC 4,S DECREMENT BYTE COUNT - BNE PUNCHL NOT DONE, PUNCH NEXT BYTE - COMB 1's COMPLIMENT CHECKSUM BYTE - TFR B,A GET IT IN A-ACC TO PUNCH - LBSR OUT2H OUTPUT CHECKSUM BYTE - STX 2,S SAVE X-REG IN STACK AS NEW PUNCH ADDR - CMPX ,S COMPARE IT TO END ADDR - BNE PUNCH2 $FCB5 PUNCH NOT DONE, CONT. -PUNEXT LDA #$14 LOAD 'DC4' PUNCH OFF CODE - LBSR OUTCH OUTPUT IT - LEAS 5,S READJUST STACK POINTER - RTS ; -* -* -PRTSP LDX #MSG10 POINT TO MSG "SP=" - LBSR PDATA PRINT MSG - TFR U,X - LBRA OUT4H -PRTUS LDX #MSG12 POINT TO MSG "US=" - LBSR PDATA PRINT MSG - LDX 8,U - LBRA OUT4H -PRTDP LDX #MSG15 POINT TO MSG "DP=" - LBSR PDATA PRINT MSG - LDA 3,U - LBRA OUT2H OUTPUT HEX BYTE AS ASCII -PRTIX LDX #MSG14 POINT TO MSG "IX=" - LBSR PDATA PRINT MSG - LDX 4,U $FCE6 - LBRA OUT4H -PRTIY LDX #MSG13 POINT TO MSG "IY=" - LBSR PDATA PRINT MSG - LDX 6,U - LBRA OUT4H -PRTPC LDX #MSG11 POINT TO MSG "PC=" - LBSR PDATA PRINT MSG - LDX 10,U - BRA OUT4H -PRTA LDX #MSG16 POINT TO MSG "A=" - LBSR PDATA PRINT MSG - LDA 1,U - BRA OUT2H OUTPUT HEX BYTE AS ASCII -PRTB LDX #MSG17 POINT TO MSG "B=" - LBSR PDATA PRINT MSG - LDA 2,U - BRA OUT2H OUTPUT HEX BYTE AS ASCII -PRTCC LDX #MSG18 POINT TO MSG "CC:" - LBSR PDATA PRINT MSG - LDA ,U - LDX #MSG19 POINT TO MSG "EFHINZVC" - BRA BIASCI OUTPUT IN BINARY/ASCII FORMAT -* -* THE FOLLOWING ROUTINE LOOPS WAITING FOR THE -* OPERATOR TO INPUT TWO VALID HEX ADDRESSES. -* THE FIRST ADDRESS INPUT IS RETURNED IN "IY". -* THE SECOND IS RETURNED IN "IX". THE "V" BIT -* IN THE C-CODE REG. IS SET IF AN INVALID HEX -* ADDRESS IS INPUT. -* -IN2ADR BSR IN1ADR GET FIRST ADDRESS - BVS NOTHEX EXIT IF NOT VALID HEX - TFR X,Y SAVE FIRST ADDR. IN "IY" - LDA #'- - LBSR OUTCH PRINT " - " -* -* THE FOLLOWING ROUTINE LOOPS WAITING FOR THE -* OPERATOR TO INPUT ONE VALID HEX ADDRESS. THE -* ADDRESS IS RETURNED IN THE "X" REGISTER. -* -IN1ADR BSR BYTE INPUT BYTE (2 HEX CHAR) - BVS NOTHEX EXIT IF NOT VALID HEX - TFR D,X - BSR BYTE INPUT BYTE (2 HEX CHAR) - BVS NOTHEX - PSHS X - STA 1,S - PULS X - RTS ; -* -***** INPUT BYTE (2 HEX CHAR.) ***** -* -BYTE BSR INHEX GET HEX LEFT - BVS NOTHEX EXIT IF NOT VALID HEX - ASLA ; - ASLA ; - ASLA ; SHIFT INTO LEFT NIBBLE - ASLA ; - TFR A,B PUT HEXL IN "B" - BSR INHEX GET HEX RIGHT - BVS NOTHEX EXIT IF NOT VALID HEX - PSHS B PUSH HEXL ON STACK - ADDA ,S+ ADD HEXL TO HEXR AND ADJ. STK - RTS RETURN WITH HEX L&R IN "A" -* -* -INHEX BSR ECHON INPUT ASCII CHAR. - CMPA #'0 IS IT > OR = "0" ? - BCS NOTHEX IF LESS IT AIN'T HEX - CMPA #'9 IS IT < OR = "9" ? - BHI INHEXA IF > MAYBE IT'S ALPHA - SUBA #$30 ASCII ADJ. NUMERIC - RTS ; -* -* -INHEXA CMPA #'A IS IT > OR = "A" - BCS NOTHEX IF LESS IT AIN'T HEX - CMPA #'F IS IT < OR = "F" ? - BHI INHEXL IF > IT AIN'T HEX - SUBA #$37 ASCII ADJ. ALPHA - RTS ; -* -INHEXL CMPA #'a IS IT > OR = "a" - BCS NOTHEX IF LESS IT AIN'T HEX - CMPA #'f IS IT < "f" - BHI NOTHEX IF > IT AIN'T HEX - SUBA #$57 ADJUST TO LOWER CASE - RTS ; -* -* -NOTHEX ORCC #2 SET (V) FLAG IN C-CODES REGISTER - RTS ; -* -* -OUT4H PSHS X PUSH X-REG. ON THE STACK - PULS A POP MS BYTE OF X-REG INTO A-ACC. - BSR OUTHL OUTPUT HEX LEFT - PULS A POP LS BYTE OF X-REG INTO A-ACC. -OUTHL EQU * -OUT2H PSHS A SAVE IT BACK ON STACK - LSRA CONVERT UPPER HEX NIBBLE TO ASCII - LSRA ; - LSRA ; - LSRA ; - BSR XASCII PRINT HEX NIBBLE AS ASCII -OUTHR PULS A CONVERT LOWER HEX NIBBLE TO ASCII - ANDA #$0F STRIP LEFT NIBBLE -XASCII ADDA #$30 ASCII ADJ - CMPA #$39 IS IT < OR = "9" ? - BLE OUTC IF LESS, OUTPUT IT - ADDA #7 IF > MAKE ASCII LETTER -OUTC BRA OUTCH OUTPUT CHAR -* -* BINARY / ASCII --- THIS ROUTINE -* OUTPUTS A BYTE IN ENHANCED -* BINARY FORMAT. THE ENHANCEMENT -* IS DONE BY SUBSTITUTING ASCII -* LETTERS FOR THE ONES IN THE BYTE. -* THE ASCII ENHANCEMENT LETTERS -* ARE OBTAINED FROM THE STRING -* POINTED TO BY THE INDEX REG. "X". -* -BIASCI PSHS A SAVE "A" ON STACK - LDB #8 PRESET LOOP# TO BITS PER BYTE -OUTBA LDA ,X+ GET LETTER FROM STRING - ASL ,S TEST BYTE FOR "1" IN B7 - BCS PRTBA IF ONE PRINT LETTER - LDA #'- IF ZERO PRINT "-" -PRTBA BSR OUTCH PRINT IT - BSR OUT1S PRINT SPACE - DECB SUB 1 FROM #BITS YET TO PRINT - BNE OUTBA - PULS A - RTS -* -* PRINT STRING PRECEEDED BY A CR & LF. -* -PSTRNG BSR PCRLF PRINT CR/LF - BRA PDATA PRINT STRING POINTED TO BY IX -* -* PCRLF -* -PCRLF PSHS X SAVE IX - LDX #MSG2+1 POINT TO MSG CR/LF + 3 NULS - BSR PDATA PRINT MSG - PULS X RESTORE IX - RTS ; -PRINT BSR OUTCH -* -* PDATA -* -PDATA LDA ,X+ GET 1st CHAR. TO PRINT - CMPA #4 IS IT EOT? - BNE PRINT IF NOT EOT PRINT IT - RTS ; -* -* -ECHON TST ECHO IS ECHO REQUIRED ? - BEQ INCH ECHO NOT REQ. IF CLEAR -* -* INCHE -* -* ---GETS CHARACTER FROM TERMINAL AND -* ECHOS SAME. THE CHARACTER IS RETURNED -* IN THE "A" ACCUMULATOR WITH THE PARITY -* BIT MASKED OFF. ALL OTHER REGISTERS -* ARE PRESERVED. -* -INCHE BSR INCH GET CHAR FROM TERMINAL - ANDA #$7F STRIP PARITY FROM CHAR. - BRA OUTCH ECHO CHAR TO TERMINAL -* -* INCH -* -* GET CHARACTER FROM TERMINAL. RETURN -* CHARACTER IN "A" ACCUMULATOR AND PRESERVE -* ALL OTHER REGISTERS. THE INPUT CHARACTER -* IS 8 BITS AND IS NOT ECHOED. -* -* -INCH PSHS X SAVE IX - LDX CPORT POINT TO TERMINAL PORT -GETSTA LDA ,X FETCH PORT STATUS - BITA #1 TEST READY BIT, RDRF ? - BEQ GETSTA IF NOT RDY, THEN TRY AGAIN - LDA 1,X FETCH CHAR - PULS X RESTORE IX - RTS ; -* -* INCHEK -* -* CHECK FOR A CHARACTER AVAILABLE FROM -* THE TERMINAL. THE SERIAL PORT IS CHECKED -* FOR READ READY. ALL REGISTERS ARE -* PRESERVED, AND THE "Z" BIT WILL BE -* CLEAR IF A CHARACTER CAN BE READ. -* -* -INCHEK PSHS A SAVE A ACCUM. - LDA [CPORT] FETCH PORT STATUS - BITA #1 TEST READY BIT, RDRF ? - PULS A RESTORE A ACCUM. - RTS ; -* -OUT2S BSR OUT1S OUTPUT 2 SPACES -OUT1S LDA #$20 OUTPUT 1 SPACE -* -* -* OUTCH -* -* OUTPUT CHARACTER TO TERMINAL. -* THE CHAR. TO BE OUTPUT IS -* PASSED IN THE A REGISTER. -* ALL REGISTERS ARE PRESERVED. -* -OUTCH PSHS A,X SAVE A ACCUM AND IX - LDX CPORT GET ADDR. OF TERMINAL -FETSTA LDA ,X FETCH PORT STATUS - BITA #2 TEST TDRE, OK TO XMIT ? - BEQ FETSTA IF NOT LOOP UNTIL RDY - PULS A GET CHAR. FOR XMIT - STA 1,X XMIT CHAR. - PULS X RESTORE IX - RTS ; -* -* -ACINIZ LDX CPORT POINT TO CONTROL PORT ADDRESS - LDA #3 RESET ACIA PORT CODE - STA ,X STORE IN CONTROL REGISTER - LDA #$11 SET 8 DATA, 2 STOP AN 0 PARITY - STA ,X STORE IN CONTROL REGISTER - TST 1,X ANYTHING IN DATA REGISTER? - LDA #$FF TURN ON ECHO FLAG - STA ECHO - RTS -* -* -* MONITOR KEYBOARD COMMAND JUMP TABLE -* -* -JMPTAB EQU * - FCB 1 " ^A " $F91D - FDB ALTRA - FCB 2 " ^B " $F90F - FDB ALTRB - FCB 3 " ^C " $F92B - FDB ALTRCC - FCB 4 " ^D " $F901 - FDB ALTRDP - FCB $10 " ^P " $F8C9 - FDB ALTRPC - FCB $15 " ^U " $F8D7 - FDB ALTRU - FCB $18 " ^X " $F8F3 - FDB ALTRX - FCB $19 " ^Y " $F8E5 - FDB ALTRY -* - FCC 'B' - FDB BRKPNT *$FA78 - FCC 'D' - FDB DBOOT *$FAF1 - FCC 'E' - FDB MEMDUMP *$F990 - FCC 'G' - FDB GO *$F89F - FCC 'L' - FDB LOAD *$FC09 - FCC 'M' - FDB MEMCHG *$F93B - FCC 'P' - FDB PUNCH *$FC64 - FCC 'Q' - FDB MEMTST *$F9EF - FCC 'R' - FDB REGSTR *$F8A2 - FCC 'S' - FDB DISSTK *$F984 - FCC 'U' - FDB MINBOOT *$FBB0 - FCC 'X' - FDB XBKPNT *$FAA4 -* -TABEND EQU * -* -* ** 6809 VECTOR ADDRESSES ** -* -* FOLLOWING ARE THE ADDRESSES OF THE VECTOR ROUTINES -* FOR THE 6809 PROCESSOR. DURING INITIALIZATION THEY -* ARE RELOCATED TO RAM FROM $DFC0 TO $DFCF. THEY ARE -* RELOCATED TO RAM SO THAT THE USER MAY REVECTOR TO -* HIS OWN ROUTINES IF HE SO DESIRES. -* -* -RAMVEC FDB SWIE USER-V - FDB RTI SWI3-V - FDB RTI SWI2-V - FDB RTI FIRQ-V - FDB RTI IRQ-V - FDB SWIE SWI-V - FDB $FFFF SVC-VO - FDB $FFFF SVC-VL -* -* PRINTABLE MESSAGE STRINGS -* -MSG1 FCB $0,$0,$0,$D,$A,$0,$0,$0 * 0, CR/LF, 0 - FCC 'S-BUG 1.8 - ' - FCB 4 -MSG2 FCB 'K,$D,$A,$0,$0,$0,4 K, * CR/LF + 3 NULS -MSG3 FCC '>' - FCB 4 -MSG4 FCC 'WHAT?' - FCB 4 -MSG5 FCC ' - ' - FCB 4' -MSG6 FCC ', PASS ' - FCB 4 -MSG7 FCC ', BITS IN ERROR: ' - FCB 4 -MSG8 FCC ' => ' - FCB 4 -MSG9 FCC '76543210' -MSG10 FCC ' SP=' - FCB 4 -MSG11 FCC ' PC=' - FCB 4 -MSG12 FCC ' US=' - FCB 4 -MSG13 FCC ' IY=' - FCB 4 -MSG14 FCC ' IX=' - FCB 4 -MSG15 FCC ' DP=' - FCB 4 -MSG16 FCC ' A=' - FCB 4 -MSG17 FCC ' B=' - FCB 4 -MSG18 FCC ' CC: ' - FCB 4 -MSG19 FCC 'EFHINZVC' -MSG20 FCC 'S1' - FCB 4 -* -* MESSAGE EXPANSION AREA -* - FCB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF - FCB $FF,$FF,$FF,$FF,$FF,$FF,$FF -* -* POWER UP/ RESET/ NMI ENTRY POINT -* - ORG $FF00 -* -* -START LDX #IC11 POINT TO DAT RAM IC11 - LDA #$F GET COMPLIMENT OF ZERO -* -* -* INITIALIZE DAT RAM --- LOADS $F-$0 IN LOCATIONS $0-$F -* OF DAT RAM, THUS STORING COMPLEMENT OF MSB OF ADDRESS -* IN THE DAT RAM. THE COMPLEMENT IS REQUIRED BECAUSE THE -* OUTPUT OF IC11, A 74S189, IS THE INVERSE OF THE DATA -* STORED IN IT. -* -* -DATLP STA ,X+ STORE & POINT TO NEXT RAM LOCATION - DECA GET COMP. VALUE FOR NEXT LOCATION - BNE DATLP ALL 16 LOCATIONS INITIALIZED ? -* -* NOTE: IX NOW CONTAINS $0000, DAT RAM IS NO LONGER -* ADDRESSED, AND LOGICAL ADDRESSES NOW EQUAL -* PHYSICAL ADDRESSES. -* - LDA #$F0 - STA ,X STORE $F0 AT $FFFF - LDX #$D0A0 ASSUME RAM TO BE AT $D000-$DFFF - LDY #TSTPAT LOAD TEST DATA PATTERN INTO "Y" -TSTRAM LDU ,X SAVE DATA FROM TEST LOCATION - STY ,X STORE TEST PATTERN AT $D0A0 - CMPY ,X IS THERE RAM AT THIS LOCATION ? - BEQ CNVADR IF MATCH THERE'S RAM, SO SKIP - LEAX -$1000,X ELSE POINT 4K LOWER - CMPX #$F0A0 DECREMENTED PAST ZER0 YET ? - BNE TSTRAM IF NOT CONTINUE TESTING FOR RAM - BRA START ELSE START ALL OVER AGAIN -* -* -* THE FOLLOWING CODE STORES THE COMPLEMENT OF -* THE MS CHARACTER OF THE FOUR CHARACTER HEX -* ADDRESS OF THE FIRST 4K BLOCK OF RAM LOCATED -* BY THE ROUTINE "TSTRAM" INTO THE DAT RAM. IT -* IS STORED IN RAM IN THE LOCATION THAT IS -* ADDRESSED WHEN THE PROCESSOR ADDRESS IS $D---, -* THUS IF THE FIRST 4K BLOCK OF RAM IS FOUND -* WHEN TESTING LOCATION $70A0, MEANING THERE -* IS NO RAM PHYSICALLY ADDRESSED IN THE RANGE -* $8000-$DFFF, THEN THE COMPLEMENT OF THE -* "7" IN THE $70A0 WILL BE STORED IN -* THE DAT RAM. THUS WHEN THE PROCESSOR OUTPUTS -* AN ADDRESS OF $D---, THE DAT RAM WILL RESPOND -* BY RECOMPLEMENTING THE "7" AND OUTPUTTING THE -* 7 ONTO THE A12-A15 ADDRESS LINES. THUS THE -* RAM THAT IS PHYSICALLY ADDRESSED AT $7--- -* WILL RESPOND AND APPEAR TO THE 6809 THAT IT -* IS AT $D--- SINCE THAT IS THE ADDRESS THE -* 6809 WILL BE OUTPUTING WHEN THAT 4K BLOCK -* OF RAM RESPONDS. -* -* -CNVADR STU ,X RESTORE DATA AT TEST LOCATION - TFR X,D PUT ADDR. OF PRESENT 4K BLOCK IN D - COMA COMPLEMENT MSB OF THAT ADDRESS - LSRA PUT MS 4 BITS OF ADDRESS IN - LSRA LOCATION D0-D3 TO ALLOW STORING - LSRA IT IN THE DYNAMIC ADDRESS - LSRA TRANSLATION RAM. - STA $FFFD STORE XLATION FACTOR IN DAT "D" -* - LDS #STACK INITIALIZE STACK POINTER -* -* -* THE FOLLOWING CHECKS TO FIND THE REAL PHYSICAL ADDRESSES -* OF ALL 4K BLKS OF RAM IN THE SYSTEM. WHEN EACH 4K BLK -* OF RAM IS LOCATED, THE COMPLEMENT OF IT'S REAL ADDRESS -* IS THEN STORED IN A "LOGICAL" TO "REAL" ADDRESS XLATION -* TABLE THAT IS BUILT FROM $DFD0 TO $DFDF. FOR EXAMPLE IF -* THE SYSTEM HAS RAM THAT IS PHYSICALLY LOCATED (WIRED TO -* RESPOND) AT THE HEX LOCATIONS $0--- THRU $F---.... -* -* 0 1 2 3 4 5 6 7 8 9 A B C D E F -* 4K 4K 4K 4K 4K 4K 4K 4K -- 4K 4K 4K 4K -- -- -- -* -* ....FOR A TOTAL OF 48K OF RAM, THEN THE TRANSLATION TABLE -* CREATED FROM $DFD0 TO $DFDF WILL CONSIST OF THE FOLLOWING.... -* -* 0 1 2 3 4 5 6 7 8 9 A B C D E F -* 0F 0E 0D 0C 0B 0A 09 08 06 05 00 00 04 03 F1 F0 -* -* -* HERE WE SEE THE LOGICAL ADDRESSES OF MEMORY FROM $0000-$7FFF -* HAVE NOT BEEN SELECTED FOR RELOCATION SO THAT THEIR PHYSICAL -* ADDRESS WILL = THEIR LOGICAL ADDRESS; HOWEVER, THE 4K BLOCK -* PHYSICALLY AT $9000 WILL HAVE ITS ADDRESS TRANSLATED SO THAT -* IT WILL LOGICALLY RESPOND AT $8000. LIKEWISE $A,$B, AND $C000 -* WILL BE TRANSLATED TO RESPOND TO $9000,$C000, AND $D000 -* RESPECTIVELY. THE USER SYSTEM WILL LOGICALLY APPEAR TO HAVE -* MEMORY ADDRESSED AS FOLLOWS.... -* -* 0 1 2 3 4 5 6 7 8 9 A B C D E F -* 4K 4K 4K 4K 4K 4K 4K 4K 4K 4K -- -- 4K 4K -- -- -* -* - LDY #LRARAM POINT TO LOGICAL/REAL ADDR. TABLE - STA 13,Y STORE $D--- XLATION FACTOR AT $DFDD - CLR 14,Y CLEAR $DFDE - LDA #$F0 DESTINED FOR IC8 AN MEM EXPANSION ? - STA 15,Y STORE AT $DFDF - LDA #$0C PRESET NUMBER OF BYTES TO CLEAR -CLRLRT CLR A,Y CLEAR $DFDC THRU $DFD0 - DECA SUB. 1 FROM BYTES LEFT TO CLEAR - BPL CLRLRT CONTINUE IF NOT DONE CLEARING -FNDRAM LEAX -$1000,X POINT TO NEXT LOWER 4K OF RAM - CMPX #$F0A0 TEST FOR DECREMENT PAST ZERO - BEQ FINTAB SKIP IF FINISHED - LDU ,X SAVE DATA AT CURRENT TEST LOCATION - LDY #TSTPAT LOAD TEST DATA PATTERN INTO Y REG. - STY ,X STORE TEST PATT. INTO RAM TEST LOC. - CMPY ,X VERIFY RAM AT TEST LOCATION - BNE FNDRAM IF NO RAM GO LOOK 4K LOWER - STU ,X ELSE RESTORE DATA TO TEST LOCATION - LDY #LRARAM POINT TO LOGICAL/REAL ADDR. TABLE - TFR X,D PUT ADDR. OF PRESENT 4K BLOCK IN D - LSRA PUT MS 4 BITS OF ADDR. IN LOC. D0-D3 - LSRA TO ALLOW STORING IT IN THE DAT RAM. - LSRA - LSRA - TFR A,B SAVE OFFSET INTO LRARAM TABLE - EORA #$0F INVERT MSB OF ADDR. OF CURRENT 4K BLK - STA B,Y SAVE TRANSLATION FACTOR IN LRARAM TABLE - BRA FNDRAM GO TRANSLATE ADDR. OF NEXT 4K BLK -FINTAB LDA #$F1 DESTINED FOR IC8 AND MEM EXPANSION ? - LDY #LRARAM POINT TO LRARAM TABLE - STA 14,Y STORE $F1 AT $DFCE -* -* THE FOLLOWING CHECKS TO SEE IF THERE IS A 4K BLK OF -* RAM LOCATED AT $C000-$CFFF. IF NONE THERE IT LOCATES -* THE NEXT LOWER 4K BLK AN XLATES ITS ADDR SO IT -* LOGICALLY RESPONDS TO THE ADDRESS $C---. -* -* - LDA #$0C PRESET NUMBER HEX "C" -FINDC LDB A,Y GET ENTRY FROM LRARAM TABLE - BNE FOUNDC BRANCH IF RAM THIS PHYSICAL ADDR. - DECA ELSE POINT 4K LOWER - BPL FINDC GO TRY AGAIN - BRA XFERTF -FOUNDC CLR A,Y CLR XLATION FACTOR OF 4K BLOCK FOUND - STB $C,Y GIVE IT XLATION FACTOR MOVING IT TO $C--- -* -* THE FOLLOWING CODE ADJUSTS THE TRANSLATION -* FACTORS SUCH THAT ALL REMAINING RAM WILL -* RESPOND TO A CONTIGUOUS BLOCK OF LOGICAL -* ADDRESSES FROM $0000 AND UP.... -* - CLRA START AT ZERO - TFR Y,X START POINTER "X" START OF "LRARAM" TABLE. -COMPRS LDB A,Y GET ENTRY FROM "LRARAM" TABLE - BEQ PNTNXT IF IT'S ZER0 SKIP - CLR A,Y ELSE ERASE FROM TABLE - STB ,X+ AND ENTER ABOVE LAST ENTRY- BUMP -PNTNXT INCA GET OFFSET TO NEXT ENTRY - CMPA #$0C LAST ENTRY YET ? - BLT COMPRS -* -* THE FOLLOWING CODE TRANSFER THE TRANSLATION -* FACTORS FROM THE LRARAM TABLE TO IC11 ON -* THE MP-09 CPU CARD. -* -XFERTF LDX #IC11 POINT TO DAT RAM IC11 - LDB #$10 GET NO. OF BYTES TO MOVE -FETCH LDA ,Y+ GET BYTE AND POINT TO NEXT - STA ,X+ POKE XLATION FACTOR IN IC11 - DECB SUB 1 FROM BYTES TO MOVE - BNE FETCH CONTINUE UNTIL 16 MOVED - COMB SET "B" NON-ZERO - STB ECHO TURN ON ECHO FLAG - LBRA MONITOR INITIALIZATION IS COMPLETE -* -* -V1 JMP [STACK] -V2 JMP [SWI2] -V3 JMP [FIRQ] -V4 JMP [IRQ] -V5 JMP [SWI] -* -* SWI3 ENTRY POINT -* -SWI3E TFR S,U - LDX 10,U *$FFC8 - LDB ,X+ - STX 10,U - CLRA - ASLB - ROLA - LDX SVCVO - CMPX #$FFFF - BEQ SWI3Z - LEAX D,X - CMPX SVCVL - BHI SWI3Z - PSHS X - LDD ,U - LDX 4,U - JMP [,S++] -SWI3Z PULU A,B,X,CC,DP - LDU 2,U - JMP [SWI3] -* -* 6809 VECTORS -* - FDB V1 USER-V - FDB SWI3E SWI3-V - FDB V2 SWI2-V - FDB V3 FIRQ-V - FDB V4 IRQ-V - FDB V5 SWI-V - FDB V1 NMI-V - FDB START RESTART-V - END START Index: trunk/sw/sbug_src.lst =================================================================== --- trunk/sw/sbug_src.lst (revision 2) +++ trunk/sw/sbug_src.lst (nonexistent) @@ -1,1412 +0,0 @@ -0001 * NAM SBUG18 MP-09 MONITOR -0002 OPT l - sbug_src.txt page 2 -0004 * -0005 * MONITOR PROGRAM FOR THE SOUTHWEST TECHNICAL -0006 * PRODUCTS MP-09 CPU BOARD AS COMMENTED BY.... -0007 * -0008 * ALLEN CLARK WALLACE WATSON -0009 * 2502 REGAL OAKS LANE 4815 EAST 97th AVE. -0010 * LUTZ, FLA. 33549 TEMPLE TERRACE, FLA. 33617 -0011 * PH. 813-977-0347 PH. 813-985-1359 -0012 * -0013 * MODIFIED TO SBUG09 VER 1.8 BY: RANDY JARRETT -0014 * 2561 NANTUCKET DR APT. E -0015 * ATLANTA, GA 30345 -0016 * PH. 404-320-1043 -0017 * -0018 * -0019 * *** COMMANDS *** -0020 * -0021 * CONTROL A = ALTER THE "A" ACCUMULATOR -0022 * CONTROL B = ALTER THE "B" ACCUMULATOR -0023 * CONTROL C = ALTER THE CONDITION CODE REGISTER -0024 * CONTROL D = ALTER THE DIRECT PAGE REGISTER -0025 * CONTROL P = ALTER THE PROGRAM COUNTER -0026 * CONTROL U = ALTER USER STACK POINTER -0027 * CONTROL X = ALTER "X" INDEX REGISTER -0028 * CONTROL Y = ALTER "Y" INDEX REGISTER -0029 * B hhhh = SET BREAKPOINT AT LOCATION $hhhh -0030 * D = BOOT A SWTPC 8 INCH FLOPPY SYSTEM -0031 * U = BOOT A SWTPC 5 INCH FLOPPY SYSTEM -0032 * E ssss-eeee = EXAMINE MEMORY FROM STARTING ADDRESS ssss -0033 * -TO ENDING ADDRESS eeee. -0034 * G = CONTINUE EXECUTION FROM BREAKPOINT OR SWI -0035 * L = LOAD TAPE -0036 * M hhhh = EXAMINE AND CHANGE MEMORY LOCATION hhhh -0037 * P ssss-eeee = PUNCH TAPE, START ssss TO END eeee ADDR. -0038 * Q ssss-eeee = TEST MEMORY FROM ssss TO eeee -0039 * R = DISPLAY REGISTER CONTENTS -0040 * S = DISPLAY STACK FROM ssss TO $DFC0 -0041 * X = REMOVE ALL BREAKPOINTS -0042 * -0043 * -0044 55aa TSTPAT EQU $55AA TEST PATTERN -0045 * -0046 * -0047 * -0048 dfc0 ORG $DFC0 -0049 dfc0 STACK RMB 2 TOP OF INTERNAL STACK / USER VECTOR -0050 dfc2 SWI3 RMB 2 SOFTWARE INTERRUPT VECTOR #3 -0051 dfc4 SWI2 RMB 2 SOFTWARE INTERRUPT VECTOR #2 -0052 dfc6 FIRQ RMB 2 FAST INTERRUPT VECTOR -0053 dfc8 IRQ RMB 2 INTERRUPT VECTOR -0054 dfca SWI RMB 2 SOFTWARE INTERRUPT VECTOR -0055 dfcc SVCVO RMB 2 SUPERVISOR CALL VECTOR ORGIN -0056 dfce SVCVL RMB 2 SUPERVISOR CALL VECTOR LIMIT -0057 dfd0 LRARAM RMB 16 LRA ADDRESSES -0058 dfe0 CPORT RMB 2 RE-VECTORABLE CONTROL PORT -0059 dfe2 ECHO RMB 1 ECHO FLAG -0060 dfe3 BPTBL RMB 24 BREAKPOINT TABLE BASE ADDR -0061 e004 ACIAS EQU $E004 CONTROL PORT -0062 e018 Comreg EQU $E018 COMMAND REGISTER -0063 e014 Drvreg EQU $E014 DRIVE REGISTER -0064 e01a Secreg EQU $E01A SECTOR REGISTER -0065 e01b Datreg EQU $E01B DATA REGISTER -0066 * -0067 f000 ADDREG EQU $F000 ADDRESS REGISTER -0068 f002 CNTREG EQU $F002 COUNT REGISTER -0069 f010 CCREG EQU $F010 CHANNEL CONTROL REGISTER -0070 f014 PRIREG EQU $F014 DMA PRIORITY REGISTER -0071 f015 AAAREG EQU $F015 ??? -0072 f016 BBBREG EQU $F016 ??? -0073 f020 COMREG EQU $F020 1791 COMMAND REGISTER -0074 f022 SECREG EQU $F022 SECTOR REGISTER -0075 f024 DRVREG EQU $F024 DRIVE SELECT LATCH -0076 f040 CCCREG EQU $F040 ??? -0077 * -0078 fff0 IC11 EQU $FFF0 DAT RAM CHIP -0079 * -0080 f800 ORG $F800 -0081 f800 f8 14 FDB MONITOR -0082 f802 f8 61 FDB NEXTCMD -0083 f804 fd cf FDB INCH -0084 f806 fd c9 FDB INCHE -0085 f808 fd df FDB INCHEK -0086 f80a fd ee FDB OUTCH -0087 f80c fd bd FDB PDATA -0088 f80e fd b1 FDB PCRLF -0089 f810 fd ad FDB PSTRNG -0090 f812 fb 81 FDB LRA -0091 * -0092 * MONITOR -0093 * -0094 * VECTOR ADDRESS STRING IS..... -0095 * $F8A1-$F8A1-$F8A1-$F8A1-$F8A1-$FAB0-$FFFF-$FFFF -0096 * -0097 f814 8e fe 4f MONITOR LDX #RAMVEC POINT TO VECTOR ADDR. STRING -0098 f817 10 8e df c0 LDY #STACK POINT TO RAM VECTOR LOCATION -0099 f81b c6 10 LDB #$10 BYTES TO MOVE = 16 -0100 f81d a6 80 LOOPA LDA ,X+ GET VECTOR BYTE -0101 f81f a7 a0 STA ,Y+ PUT VECTORS IN RAM / $DFC0-$DFCF -0102 f821 5a DECB SUBTRACT 1 FROM NUMBER OF BYTES TO MOVE -0103 f822 26 f9 BNE LOOPA CONTINUE UNTIL ALL VECTORS MOVED -0104 * -0105 * CONTENTS FROM TO FUNCTION -0106 * $F8A1 $FE40 $DFC0 USER-V -0107 * $F8A1 $FE42 $DFC2 SWI3-V -0108 * $F8A1 $FE44 $DFC4 SWI2-V -0109 * $F8A1 $FE46 $DFC6 FIRQ-V -0110 * $F8A1 $FE48 $DFC8 IRQ-V -0111 * $FAB0 $FE4A $DFCA SWI-V -0112 * $FFFF $FE4C $DFCC SVC-VO -0113 * $FFFF $FE4E $DFCE SVC-VL -0114 * -0115 f824 8e e0 04 LDX #ACIAS GET CONTROL PORT ADDR. -0116 f827 bf df e0 STX CPORT STORE ADDR. IN RAM -0117 f82a 17 02 7a LBSR XBKPNT CLEAR OUTSTANDING BREAKPOINTS -0118 f82d c6 0c LDB #12 CLEAR 12 BYTES ON STACK -0119 f82f 6f e2 CLRSTK CLR ,-S -0120 f831 5a DECB -0121 f832 26 fb BNE CLRSTK -0122 f834 30 8c dd LEAX MONITOR,PCR SET PC TO SBUG-E ENTRY -0123 f837 af 6a STX 10,S ON STACK -0124 f839 86 d0 LDA #$D0 PRESET CONDITION CODES ON STACK -0125 f83b a7 e4 STA ,S -0126 f83d 1f 43 TFR S,U -0127 f83f 17 05 be LBSR ACINIZ INITIALIZE CONTROL PORT -0128 f842 8e fe 5f LDX #MSG1 POINT TO 'SBUG 1.8' MESSAGE -0129 f845 17 05 75 LBSR PDATA PRINT MSG -0130 f848 8e df d0 LDX #LRARAM POINT TO LRA RAM STORAGE AREA -0131 f84b 4f CLRA START TOTAL AT ZERO -0132 f84c c6 0d LDB #13 TOTAL UP ALL ACTIVE RAM MEMORY -0133 f84e 6d 85 FNDREL TST B,X TEST FOR RAM AT NEXT LOC. -0134 f850 27 03 BEQ RELPAS IF NO RAM GO TO NEXT LOC. -0135 f852 8b 04 ADDA #4 ELSE ADD 4K TO TOTAL -0136 f854 19 DAA ADJ. TOTAL FOR DECIMAL -0137 f855 5a RELPAS DECB SUB. 1 FROM LOCS. TO TEST -0138 f856 2a f6 BPL FNDREL PRINT TOTAL OF RAM -0139 f858 17 05 26 LBSR OUT2H OUTPUT HEX BYTE AS ASCII -0140 f85b 8e fe 74 LDX #MSG2 POINT TO MSG 'K' CR/LF + 3 NULS -0141 f85e 17 05 5c LBSR PDATA PRINT MSG -0142 * -0143 ***** NEXTCMD ***** -0144 * -0145 f861 8e fe 7b NEXTCMD LDX #MSG3 POINT TO MSG ">" -0146 f864 17 05 46 LBSR PSTRNG PRINT MSG -0147 f867 17 05 65 LBSR INCH GET ONE CHAR. FROM TERMINAL -0148 f86a 84 7f ANDA #$7F STRIP PARITY FROM CHAR. -0149 f86c 81 0d CMPA #$0D IS IT CARRIAGE RETURN ? -0150 f86e 27 f1 BEQ NEXTCMD IF CR THEN GET ANOTHER CHAR. -0151 f870 1f 89 TFR A,B PUT CHAR. IN "B" ACCUM. -0152 f872 81 20 CMPA #$20 IS IT CONTROL OR DATA CHAR ? -0153 f874 2c 09 BGE PRTCMD IF CMD CHAR IS DATA, PRNT IT -0154 f876 86 5e LDA #'^ ELSE CNTRL CHAR CMD SO... -0155 f878 17 05 73 LBSR OUTCH PRINT "^" -0156 f87b 1f 98 TFR B,A RECALL CNTRL CMD CHAR -0157 f87d 8b 40 ADDA #$40 CONVERT IT TO ASCII LETTER -0158 f87f 17 05 6c PRTCMD LBSR OUTCH PRNT CMD CHAR -0159 f882 17 05 67 LBSR OUT1S PRNT SPACE -0160 f885 c1 60 CMPB #$60 -0161 f887 2f 02 BLE NXTCH0 -0162 f889 c0 20 SUBB #$20 -0163 * -0164 * -0165 ***** DO TABLE LOOKUP ***** -0166 * FOR COMMAND FUNCTIONS -0167 * -0168 * -0169 f88b 8e fe 13 NXTCH0 LDX #JMPTAB POINT TO JUMP TABLE -0170 f88e e1 80 NXTCHR CMPB ,X+ DOES COMMAND MATCH TABLE ENTRY ? -0171 f890 27 0f BEQ JMPCMD BRANCH IF MATCH FOUND -0172 f892 30 02 LEAX 2,X POINT TO NEXT ENTRY IN TABLE -0173 f894 8c fe 4f CMPX #TABEND REACHED END OF TABLE YET ? -0174 f897 26 f5 BNE NXTCHR IF NOT END, CHECK NEXT ENTRY -0175 f899 8e fe 7d LDX #MSG4 POINT TO MSG "WHAT?" -0176 f89c 17 05 1e LBSR PDATA PRINT MSG -0177 f89f 20 c0 BRA NEXTCMD IF NO MATCH, PRMPT FOR NEW CMD -0178 f8a1 ad 94 JMPCMD JSR [,X] JUMP TO COMMAND ROUTINE -0179 f8a3 20 bc BRA NEXTCMD PROMPT FOR NEW COMMAND -0180 * -0181 * "G" GO OR CONTINUE -0182 * -0183 f8a5 1f 34 GO TFR U,S -0184 f8a7 3b RTI RTI -0185 * -0186 * "R" DISPLAY REGISTERS -0187 * -0188 f8a8 8e fe 83 REGSTR LDX #MSG5 POINT TO MSG " - " -0189 f8ab 17 04 ff LBSR PSTRNG PRINT MSG -0190 f8ae 17 04 11 LBSR PRTSP $FCBF -0191 f8b1 17 04 19 LBSR PRTUS $FCCA -0192 f8b4 17 04 21 LBSR PRTDP $FCD5 -0193 f8b7 17 04 29 LBSR PRTIX $FCE0 -0194 f8ba 17 04 31 LBSR PRTIY $FCEB -0195 f8bd 8e fe 83 LDX #MSG5 POINT TO MSG " - " -0196 f8c0 17 04 ea LBSR PSTRNG PRINT MSG -0197 f8c3 17 04 33 LBSR PRTPC $FCF5 -0198 f8c6 17 04 3a LBSR PRTA $FCFF -0199 f8c9 17 04 41 LBSR PRTB $FD09 -0200 f8cc 16 04 48 LBRA PRTCC $FD13 -0201 * -0202 * -0203 * ALTER "PC" PROGRAM COUNTER -0204 * -0205 * -0206 f8cf 17 04 27 ALTRPC LBSR PRTPC $FCF5 PRINT MSG " PC = " -0207 f8d2 17 05 17 LBSR OUT1S OUTPUT SPACE -0208 f8d5 17 04 57 LBSR IN1ADR GET NEW CONTENTS FOR "PC" -0209 f8d8 29 02 BVS ALTPCD EXIT IF INVALID HEX -0210 f8da af 4a STX 10,U POKE IN NEW CONTENTS -0211 f8dc 39 ALTPCD RTS ; -0212 * -0213 * -0214 * ALTER "U" USER STACK POINTER -0215 * -0216 * -0217 f8dd 17 03 ed ALTRU LBSR PRTUS $FCCA PRINT MSG " US = " -0218 f8e0 17 05 09 LBSR OUT1S OUTPUT SPACE -0219 f8e3 17 04 49 LBSR IN1ADR -0220 f8e6 29 02 BVS ALTUD -0221 f8e8 af 48 STX 8,U -0222 f8ea 39 ALTUD RTS ; -0223 * -0224 * -0225 * ALTER "Y" INDEX REGISTER -0226 * -0227 * -0228 f8eb 17 04 00 ALTRY LBSR PRTIY PRINT MSG " IY = " -0229 f8ee 17 04 fb LBSR OUT1S OUTPUT SPACE -0230 f8f1 17 04 3b LBSR IN1ADR -0231 f8f4 29 02 BVS ALTYD -0232 f8f6 af 46 STX 6,U $F8F0 -0233 f8f8 39 ALTYD RTS ; -0234 * -0235 * -0236 * ALTER "X" INDEX REGISTER -0237 * -0238 * -0239 f8f9 17 03 e7 ALTRX LBSR PRTIX $FCE0 PRINT MSG " IX = " -0240 f8fc 17 04 ed LBSR OUT1S OUTPUT SPACE -0241 f8ff 17 04 2d LBSR IN1ADR -0242 f902 29 02 BVS ALTXD -0243 f904 af 44 STX 4,U -0244 f906 39 ALTXD RTS ; -0245 * -0246 * -0247 * ALTER "DP" DIRECT PAGE REGISTER -0248 * -0249 * -0250 f907 17 03 ce ALTRDP LBSR PRTDP $FCD5 PRINT MSG " DP = " -0251 f90a 17 04 df LBSR OUT1S OUTPUT SPACE -0252 f90d 17 04 30 LBSR BYTE INPUT BYTE (2 HEX CHAR) -0253 f910 29 02 BVS ALTDPD -0254 f912 a7 43 STA 3,U -0255 f914 39 ALTDPD RTS ; -0256 * -0257 * -0258 * ALTER "B" ACCUMULATOR -0259 * -0260 * -0261 f915 17 03 f5 ALTRB LBSR PRTB $FD09 PRINT MSG " B = " -0262 f918 17 04 d1 LBSR OUT1S OUTPUT SPACE -0263 f91b 17 04 22 LBSR BYTE INPUT BYTE (2 HEX CHAR) -0264 f91e 29 02 BVS ALTBD -0265 f920 a7 42 STA 2,U -0266 f922 39 ALTBD RTS $F91C -0267 * -0268 * -0269 * ALTER "A" ACCUMULATOR -0270 * -0271 * -0272 f923 17 03 dd ALTRA LBSR PRTA $FCFF RINT MSG " A = " -0273 f926 17 04 c3 LBSR OUT1S OUTPUT SPACE -0274 f929 17 04 14 LBSR BYTE INPUT BYTE (2 HEX CHAR) -0275 f92c 29 02 BVS ALTAD -0276 f92e a7 41 STA 1,U -0277 f930 39 ALTAD RTS ; -0278 * -0279 * -0280 * ALTER "CC" REGISTER -0281 * -0282 * -0283 f931 17 03 e3 ALTRCC LBSR PRTCC $FD13 PRINT MSG " CC: " -0284 f934 17 04 b5 LBSR OUT1S OUTPUT SPACE -0285 f937 17 04 06 LBSR BYTE INPUT BYTE (2 HEX CHAR) -0286 f93a 29 04 BVS ALTCCD -0287 f93c 8a 80 ORA #$80 SETS "E" FLAG IN PRINT LIST -0288 f93e a7 c4 STA ,U -0289 f940 39 ALTCCD RTS ; -0290 * -0291 ***** "M" MEMORY EXAMINE AND CHANGE ***** -0292 * -0293 f941 17 03 eb MEMCHG LBSR IN1ADR INPUT ADDRESS -0294 f944 29 2d BVS CHRTN IF NOT HEX, RETURN -0295 f946 1f 12 TFR X,Y SAVE ADDR IN "Y" -0296 f948 8e fe 83 MEMC2 LDX #MSG5 POINT TO MSG " - " -0297 f94b 17 04 5f LBSR PSTRNG PRINT MSG -0298 f94e 1f 21 TFR Y,X FETCH ADDRESS -0299 f950 17 04 26 LBSR OUT4H PRINT ADDR IN HEX -0300 f953 17 04 96 LBSR OUT1S OUTPUT SPACE -0301 f956 a6 a4 LDA ,Y GET CONTENTS OF CURRENT ADDR. -0302 f958 17 04 26 LBSR OUT2H OUTPUT CONTENTS IN ASCII -0303 f95b 17 04 8e LBSR OUT1S OUTPUT SPACE -0304 f95e 17 03 df LBSR BYTE LOOP WAITING FOR OPERATOR INPUT -0305 f961 28 11 BVC CHANGE IF VALID HEX GO CHANGE MEM. LOC. -0306 f963 81 08 CMPA #8 IS IT A BACKSPACE (CNTRL H)? -0307 f965 27 e1 BEQ MEMC2 PROMPT OPERATOR AGAIN -0308 f967 81 18 CMPA #$18 IS IT A CANCEL (CNTRL X)? -0309 f969 27 dd BEQ MEMC2 PROMPT OPERATOR AGAIN -0310 f96b 81 5e CMPA #'^ IS IT AN UP ARROW? -0311 f96d 27 17 BEQ BACK DISPLAY PREVIOUS BYTE -0312 f96f 81 0d CMPA #$D IS IT A CR? -0313 f971 26 0f BNE FORWRD DISPLAY NEXT BYTE -0314 f973 39 CHRTN RTS EXIT ROUTINE -0315 * -0316 * -0317 f974 a7 a4 CHANGE STA ,Y CHANGE BYTE IN MEMORY -0318 f976 a1 a4 CMPA ,Y DID MEMORY BYTE CHANGE? -0319 f978 27 08 BEQ FORWRD $F972 -0320 f97a 17 04 6f LBSR OUT1S OUTPUT SPACE -0321 f97d 86 3f LDA #'? LOAD QUESTION MARK -0322 f97f 17 04 6c LBSR OUTCH PRINT IT -0323 f982 31 21 FORWRD LEAY 1,Y POINT TO NEXT HIGHER MEM LOCATION -0324 f984 20 c2 BRA MEMC2 PRINT LOCATION & CONTENTS -0325 f986 31 3f BACK LEAY -1,Y POINT TO LAST MEM LOCATION -0326 f988 20 be BRA MEMC2 PRINT LOCATION & CONTENTS -0327 * -0328 * "S" DISPLAY STACK -0329 * HEX-ASCII DISPLAY OF CURRENT STACK CONTENTS FROM -0330 ** CURRENT STACK POINTER TO INTERNAL STACK LIMIT. -0331 * -0332 f98a 17 03 35 DISSTK LBSR PRTSP PRINT CURRENT STACK POINTER -0333 f98d 1f 32 TFR U,Y -0334 f98f 8e df c0 LDX #STACK LOAD INTERNAL STACK AS UPPER LIMIT -0335 f992 30 1f LEAX -1,X POINT TO CURRENT STACK -0336 f994 20 05 BRA MDUMP1 ENTER MEMORY DUMP OF STACK CONTENTS -0337 * -0338 * "E" DUMP MEMORY FOR EXAMINE IN HEX AND ASCII -0339 * AFTER CALLING 'IN2ADR' LOWER ADDRESS IN Y-REG. -0340 * UPPER ADDRESS IN X-REG. -0341 * IF HEX ADDRESSES ARE INVALID (V)=1. -0342 * -0343 f996 17 03 8b MEMDUMP LBSR IN2ADR INPUT ADDRESS BOUNDRIES -0344 f999 29 06 BVS EDPRTN NEW COMMAND IF ILLEGAL HEX -0345 f99b 34 20 MDUMP1 PSHS Y COMPARE LOWER TO UPPER BOUNDS -0346 f99d ac e1 CMPX ,S++ LOWER BOUNDS > UPPER BOUNDS? -0347 f99f 24 01 BCC AJDUMP IF NOT, DUMP HEX AND ASCII -0348 f9a1 39 EDPRTN RTS ; -0349 * -0350 * ADJUST LOWER AND UPPER ADDRESS LIMITS -0351 * TO EVEN 16 BYTE BOUNDRIES. -0352 * -0353 * IF LOWER ADDR = $4532 -0354 * LOWER BOUNDS WILL BE ADJUSTED TO = $4530. -0355 * -0356 * IF UPPER ADDR = $4567 -0357 * UPPER BOUNDS WILL BE ADJUSTED TO = $4570. -0358 * -0359 * ENTER WITH LOWER ADDRESS IN X-REG. -0360 * -UPPER ADDRESS ON TOP OF STACK. -0361 * -0362 f9a2 1f 10 AJDUMP TFR X,D GET UPPER ADDR IN D-REG -0363 f9a4 c3 00 10 ADDD #$10 ADD 16 TO UPPER ADDRESS -0364 f9a7 c4 f0 ANDB #$F0 MASK TO EVEN 16 BYTE BOUNDRY -0365 f9a9 34 06 PSHS A,B SAVE ON STACK AS UPPER DUMP LIMIT -0366 f9ab 1f 20 TFR Y,D $F9A5 GET LOWER ADDRESS IN D-REG -0367 f9ad c4 f0 ANDB #$F0 MASK TO EVEN 16 BYTE BOUNDRY -0368 f9af 1f 01 TFR D,X PUT IN X-REG AS LOWER DUMP LIMIT -0369 f9b1 ac e4 NXTLIN CMPX ,S COMPARE LOWER TO UPPER LIMIT -0370 f9b3 27 05 BEQ SKPDMP IF EQUAL SKIP HEX-ASCII DUMP -0371 f9b5 17 04 27 LBSR INCHEK CHECK FOR INPUT FROM KEYBOARD -0372 f9b8 27 03 BEQ EDUMP IF NONE, CONTINUE WITH DUMP -0373 f9ba 32 62 SKPDMP LEAS 2,S READJUST STACK IF NOT DUMPING -0374 f9bc 39 RTS ; -0375 * -0376 * PRINT 16 HEX BYTES FOLLOWED BY 16 ASCII CHARACTERS -0377 * FOR EACH LINE THROUGHOUT ADDRESS LIMITS. -0378 * -0379 f9bd 34 10 EDUMP PSHS X PUSH LOWER ADDR LIMIT ON STACK -0380 f9bf 8e fe 83 LDX #MSG5 POINT TO MSG " - " -0381 f9c2 17 03 e8 LBSR PSTRNG PRINT MSG -0382 f9c5 ae e4 LDX ,S LOAD LOWER ADDR FROM TOP OF STACK -0383 f9c7 17 03 af LBSR OUT4H PRINT THE ADDRESS LBSR OUT2S PRINT 2 SPACES -0384 f9ca c6 10 LDB #$10 LOAD COUNT OF 16 BYTES TO DUMP -0385 f9cc a6 80 ELOOP LDA ,X+ GET FROM MEMORY HEX BYTE TO PRINT -0386 f9ce 17 03 b0 LBSR OUT2H OUTPUT HEX BYTE AS ASCII -0387 f9d1 17 04 18 LBSR OUT1S OUTPUT SPACE -0388 f9d4 5a DECB $F9D1 DECREMENT BYTE COUNT -0389 f9d5 26 f5 BNE ELOOP CONTINUE TIL 16 HEX BYTES PRINTED -0390 * -0391 * PRINT 16 ASCII CHARACTERS -0392 * IF NOT PRINTABLE OR NOT VALID -0393 * ASCII PRINT A PERIOD (.) -0394 f9d7 17 04 10 LBSR OUT2S 2 SPACES -0395 f9da ae e1 LDX ,S++ GET LOW LIMIT FRM STACK - ADJ STACK -0396 f9dc c6 10 LDB #$10 SET ASCII CHAR TO PRINT = 16 -0397 f9de a6 80 EDPASC LDA ,X+ GET CHARACTER FROM MEMORY -0398 f9e0 81 20 CMPA #$20 IF LESS THAN $20, NON-PRINTABLE? -0399 f9e2 25 04 BCS PERIOD IF SO, PRINT PERIOD INSTEAD -0400 f9e4 81 7e CMPA #$7E IS IT VALID ASCII? -0401 f9e6 23 02 BLS PRASC IF SO PRINT IT -0402 f9e8 86 2e PERIOD LDA #'. LOAD A PERIOD (.) -0403 f9ea 17 04 01 PRASC LBSR OUTCH PRINT ASCII CHARACTER -0404 f9ed 5a DECB DECREMENT COUNT -0405 f9ee 26 ee BNE EDPASC -0406 f9f0 20 bf BRA NXTLIN -0407 * -0408 ***** "Q" MEMORY TEST ***** -0409 * -0410 f9f2 6f e2 MEMTST CLR ,-S CLEAR BYTE ON STACK -0411 f9f4 6f e2 CLR ,-S CLEAR ANOTHER BYTE -0412 f9f6 17 03 2b LBSR IN2ADR GET BEGIN(Y) & END(X) ADDR. LIMITS -0413 f9f9 34 30 PSHS X,Y SAVE ADDRESSES ON STACK -0414 f9fb 29 7b BVS ADJSK6 EXIT IF NOT VALID HEX -0415 f9fd ac 62 CMPX 2,S COMPARE BEGIN TO END ADDR. -0416 f9ff 25 77 BCS ADJSK6 EXIT IF BEGIN > END ADDR. -0417 fa01 17 03 e8 LBSR OUT1S OUTPUT SPACE -0418 fa04 1f 20 MEMSET TFR Y,D PUT BEGIN ADDR. IN 'D'-ACCUM. -0419 fa06 e3 64 ADDD 4,S ADD PASS COUNT TO BEGIN ADDR -0420 fa08 34 04 PSHS B ADD LS BYTE TO MS BYTE OF BEGIN ADDR -0421 fa0a ab e0 ADDA ,S+ -0422 fa0c a7 a0 STA ,Y+ SAVE THIS DATA BYTE AT BEGIN ADDR -0423 fa0e 10 ac e4 CMPY ,S COMPARE END TO BEGIN ADDR -0424 fa11 25 f1 BCS MEMSET IF BEGIN LOWER, CONTINUE TO SET MEMORY -0425 fa13 10 ae 62 LDY 2,S RELOAD BEGIN ADDRESS -0426 fa16 1f 20 TEST1 TFR Y,D PUT BEGIN ADDR IN 'D'-ACC. -0427 fa18 e3 64 ADDD 4,S ADD PASS COUNT TO ADDRESS -0428 fa1a 34 02 PSHS A ADD MS BYTE TO LS BYTE OF ADDRESS -0429 fa1c eb e0 ADDB ,S+ -0430 fa1e e8 a0 EORB ,Y+ EX-OR THIS DATA WITH DATA IN MEMORY LOC. -0431 fa20 27 3c BEQ GUDPAS IF (Z) SET, MEMORY BYTE OK -0432 fa22 8e fe 83 LDX #MSG5 POINT TO MSG " - " -0433 fa25 17 03 85 LBSR PSTRNG PRINT MSG -0434 fa28 30 3f LEAX -1,Y GET ERROR ADDRESS IN X-REG -0435 fa2a 17 03 4c LBSR OUT4H OUTPUT IT -0436 fa2d 34 10 PSHS X PUSH ERROR ADDR ON STACK -0437 fa2f 8e fe a1 LDX #MSG8 POINT TO MSG " =>" -0438 fa32 17 03 88 LBSR PDATA PRINT MSG -0439 fa35 35 10 PULS X POP ERROR ADDR FROM STACK -0440 fa37 17 01 47 LBSR LRA GET PHYSICAL ADDR FROM LRA -0441 fa3a 17 03 50 LBSR XASCII OUTPUT EXTENDED 4 BITS OF PHYSICAL ADDR -0442 fa3d 17 03 39 LBSR OUT4H OUTPUT LS 16 BITS OF PHYSICAL ADDR -0443 fa40 8e fe 87 LDX #MSG6 POINT TO MSG ", PASS " -0444 fa43 17 03 77 LBSR PDATA PRINT MSG -0445 fa46 ae 64 LDX 4,S LOAD PASS COUNT -0446 fa48 17 03 2e LBSR OUT4H OUTPUT IT -0447 fa4b 8e fe 8f LDX #MSG7 POINT TO MSG ", BITS IN ERROR -0448 fa4e 17 03 6c LBSR PDATA PRINT MSG -0449 fa51 1f 98 TFR B,A GET ERROR BYTE INTO A-ACC -0450 fa53 8e fe a6 LDX #MSG9 POINT TO MSG "76543210" -0451 fa56 17 03 3e LBSR BIASCI OUTPUT IN BINARY/ASCII FORMAT -0452 fa59 17 03 83 LBSR INCHEK CHECK FOR INPUT FROM KEYBOARD $FA56 -0453 fa5c 26 1a BNE ADJSK6 IF SO, EXIT MEMORY TEST -0454 fa5e 10 ac e4 GUDPAS CMPY ,S COMPARE END ADDR TO BEGIN ADDR -0455 fa61 25 b3 BCS TEST1 -0456 fa63 86 2b LDA #'+ GET "PASS" SYMBOL IF MEMORY PASS OK -0457 fa65 17 03 86 LBSR OUTCH OUTPUT SYMBOL TO TERMINAL -0458 fa68 17 03 74 LBSR INCHEK INPUT FROM KEYBOARD? -0459 fa6b 26 0b BNE ADJSK6 IF SO, EXIT MEMORY TEST -0460 fa6d 10 ae 62 LDY 2,S LOAD BEGIN ADDRESS -0461 fa70 6c 65 INC 5,S INCREMENT LS BYTE OF PASS COUNT -0462 fa72 26 90 BNE MEMSET IF NOT ZERO, SET NEXT MEMORY BYTE -0463 fa74 6c 64 INC 4,S INCREMENT MS BYTE OF PASS COUNT -0464 fa76 26 8c BNE MEMSET DONE WITH 65,535 PASSES OF MEMORY? -0465 fa78 32 66 ADJSK6 LEAS 6,S ADJ STACK POINTER BY 6 -0466 fa7a 39 RTS -0467 * -0468 ***** "B" SET BREAKPOINT ***** -0469 * -0470 fa7b 17 02 b1 BRKPNT LBSR IN1ADR GET BREAKPOINT ADDRESS -0471 fa7e 29 1e BVS EXITBP EXIT IF INVALID HEX ADDR. -0472 fa80 8c df c0 CMPX #STACK ADDRESS ILLEGAL IF >=$DFC0 -0473 fa83 24 1a BCC BPERR IF ERROR PRINT (?), EXIT -0474 fa85 34 10 PSHS X $FA82 PUSH BP ADDRESS ON STACK -0475 fa87 8e ff ff LDX #$FFFF LOAD DUMMY ADDR TO TEST BP TABLE -0476 fa8a 8d 55 BSR BPTEST TEST BP TABLE FOR FREE SPACE -0477 fa8c 35 10 PULS X POP BP ADDRESS FROM STACK -0478 fa8e 27 0f BEQ BPERR (Z) SET, OUT OF BP TABLE SPACE -0479 fa90 a6 84 LDA ,X GET DATA AT BREAKPOINT ADDRESS -0480 fa92 81 3f CMPA #$3F IS IT A SWI? -0481 fa94 27 09 BEQ BPERR IF SWI ALREADY, INDICATE ERROR -0482 fa96 a7 a0 STA ,Y+ SAVE DATA BYTE IN BP TABLE -0483 fa98 af a4 STX ,Y SAVE BP ADDRESS IN BP TABLE -0484 fa9a 86 3f LDA #$3F LOAD A SWI ($3F) -0485 fa9c a7 84 STA ,X SAVE SWI AT BREAKPOINT ADDRESS -0486 fa9e 39 EXITBP RTS ; -0487 * -0488 * INDICATE ERROR SETTING BREAKPOINT -0489 * -0490 fa9f 17 03 4a BPERR LBSR OUT1S OUTPUT SPACE -0491 faa2 86 3f LDA #'? LOAD (?), INDICATE BREAKPOINT ERROR -0492 faa4 16 03 47 LBRA OUTCH PRINT "?" -0493 * -0494 *** "X" CLEAR OUTSTANDING BREAKPOINTS *** -0495 * -0496 faa7 10 8e df e3 XBKPNT LDY #BPTBL POINT TO BREAKPOINT TABLE -0497 faab c6 08 LDB #8 LOAD BREAKPOINT COUNTER -0498 faad 8d 18 XBPLP BSR RPLSWI REMOVE USED ENTRY IN BP TABLE -0499 faaf 5a DECB $FAAC DECREMENT BP COUNTER -0500 fab0 26 fb BNE XBPLP END OF BREAKPOINT TABLE? -0501 fab2 39 RTS -0502 * -0503 ***** SWI ENTRY POINT ***** -0504 * -0505 fab3 1f 43 SWIE TFR S,U TRANSFER STACK TO USER POINTER -0506 fab5 ae 4a LDX 10,U LOAD PC FROM STACK INTO X-REG -0507 fab7 30 1f LEAX -1,X ADJUST ADDR DOWN 1 BYTE. -0508 fab9 8d 26 BSR BPTEST FIND BREAKPOINT IN BP TABLE -0509 fabb 27 04 BEQ REGPR IF FOUND, REPLACE DATA AT BP ADDR -0510 fabd af 4a STX 10,U SAVE BREAKPOINT ADDR IN STACK -0511 fabf 8d 06 BSR RPLSWI GO REPLACE SWI WITH ORIGINAL DATA -0512 fac1 17 fd e4 REGPR LBSR REGSTR GO PRINT REGISTERS -0513 fac4 16 fd 9a LBRA NEXTCMD GET NEXT COMMAND -0514 fac7 ae 21 RPLSWI LDX 1,Y LOAD BP ADDRESS FROM BP TABLE -0515 fac9 8c df c0 CMPX #STACK COMPARE TO TOP AVAILABLE USER MEMORY -0516 facc 24 0a BCC FFSTBL GO RESET TABLE ENTRY TO $FF'S -0517 face a6 84 LDA ,X GET DATA FROM BP ADDRESS -0518 fad0 81 3f CMPA #$3F IS IT SWI? -0519 fad2 26 04 BNE FFSTBL IF NOT, RESET TABLE ENTRY TO $FF'S -0520 fad4 a6 a4 LDA ,Y GET ORIGINAL DATA FROM BP TABLE -0521 fad6 a7 84 STA ,X $FAD3 RESTORE DATA AT BP ADDRESS -0522 fad8 86 ff FFSTBL LDA #$FF LOAD $FF IN A-ACC -0523 fada a7 a0 STA ,Y+ RESET BREAKPOINT TABLE DATA TO $FF'S -0524 fadc a7 a0 STA ,Y+ RESET BREAKPOINT TABLE ADDR TO $FF'S -0525 fade a7 a0 STA ,Y+ -0526 fae0 39 RTS -0527 * -0528 ** SEARCH BREAKPOINT TABLE FOR MATCH ** -0529 * -0530 fae1 10 8e df e3 BPTEST LDY #BPTBL POINT TO BREAKPOINT TABLE -0531 fae5 c6 08 LDB #8 LOAD BREAKPOINT COUNTER -0532 fae7 a6 a0 FNDBP LDA ,Y+ LOAD DATA BYTE -0533 fae9 ac a1 CMPX ,Y++ COMPARE ADDRESS, IS IT SAME? -0534 faeb 27 04 BEQ BPADJ IF SO, ADJUST POINTER FOR TABLE ENTRY -0535 faed 5a DECB IF NOT, DECREMENT BREAKPOINT COUNTER -0536 faee 26 f7 BNE FNDBP AND LOOK FOR NEXT POSSIBLE MATCH -0537 faf0 39 RTS ; -0538 * -0539 * -0540 faf1 31 3d BPADJ LEAY -3,Y MOVE POINTER TO BEGIN OF BP ENTRY -0541 faf3 39 RTS -0542 * -0543 *** "D" DISK BOOT FOR DMAF2 *** -0544 * -0545 faf4 86 de DBOOT LDA #$DE -0546 faf6 b7 f0 24 STA DRVREG -0547 faf9 86 ff LDA #$FF -0548 fafb b7 f0 14 STA PRIREG $FAF8 -0549 fafe b7 f0 10 STA CCREG -0550 fb01 b7 f0 15 STA AAAREG -0551 fb04 b7 f0 16 STA BBBREG -0552 fb07 7d f0 10 TST CCREG -0553 fb0a 86 d8 LDA #$D8 -0554 fb0c b7 f0 20 STA COMREG -0555 fb0f 17 00 97 LBSR DLY -0556 fb12 b6 f0 20 DBOOT0 LDA COMREG -0557 fb15 2b fb BMI DBOOT0 -0558 fb17 86 09 LDA #$09 -0559 fb19 b7 f0 20 STA COMREG -0560 fb1c 17 00 8a LBSR DLY -0561 * -0562 fb1f b6 f0 20 DISKWT LDA COMREG FETCH DRIVE STATUS -0563 fb22 85 01 BITA #1 TEST BUSY BIT -0564 fb24 26 f9 BNE DISKWT LOOP UNTIL NOT BUSY -0565 * -0566 fb26 85 10 BITA #$10 -0567 fb28 26 ca BNE DBOOT -0568 * -0569 fb2a 8e c0 00 LDX #$C000 LOGICAL ADDR. = $C000 -0570 fb2d 8d 52 BSR LRA GET 20 BIT PHYSICAL ADDR. OF LOG. ADDR. -0571 fb2f 8a 10 ORA #$10 -0572 fb31 b7 f0 40 STA CCCREG -0573 fb34 1f 10 TFR X,D -0574 fb36 43 COMA ; -0575 fb37 53 COMB ; -0576 fb38 fd f0 00 STD ADDREG -0577 fb3b 8e fe ff LDX #$FEFF LOAD DMA BYTE COUNT = $100 -0578 fb3e bf f0 02 STX CNTREG STORE IN COUNT REGISTER -0579 fb41 86 ff LDA #$FF LOAD THE CHANNEL REGISTER -0580 fb43 b7 f0 10 STA CCREG -0581 fb46 86 fe LDA #$FE SET CHANNEL 0 -0582 fb48 b7 f0 14 STA PRIREG -0583 fb4b 86 01 LDA #1 SET SECTOR TO "1" -0584 fb4d b7 f0 22 STA SECREG ISSUE COMMAND -0585 fb50 86 8c LDA #$8C SET SINGLE SECTOR READ -0586 fb52 b7 f0 20 STA COMREG ISSUE COMMAND -0587 fb55 8d 52 BSR DLY -0588 * -0589 * THE FOLLOWING CODE TESTS THE STATUS OF THE -0590 * CHANNEL CONTROL REGISTER. IF "D7" IS NOT -0591 * ZERO THEN IT WILL LOOP WAITING FOR "D7" -0592 * TO GO TO ZERO. IF AFTER 65,536 TRIES IT -0593 * IS STILL A ONE THE BOOT OPERATION WILL -0594 * BE STARTED OVER FROM THE BEGINING. -0595 * -0596 fb57 5f CLRB ; -0597 fb58 34 04 DBOOT1 PSHS B $FB55 -0598 fb5a 5f CLRB ; -0599 fb5b 7d f0 10 DBOOT2 TST CCREG -0600 fb5e 2a 0a BPL DBOOT3 -0601 fb60 5a DECB ; -0602 fb61 26 f8 BNE DBOOT2 -0603 fb63 35 04 PULS B -0604 fb65 5a DECB -0605 fb66 26 f0 BNE DBOOT1 -0606 fb68 20 8a BRA DBOOT -0607 fb6a 35 04 DBOOT3 PULS B -0608 fb6c b6 f0 20 LDA COMREG -0609 fb6f 85 1c BITA #$1C -0610 fb71 27 01 BEQ DBOOT4 -0611 fb73 39 RTS ; -0612 * -0613 * -0614 fb74 c6 de DBOOT4 LDB #$DE -0615 fb76 f7 f0 24 STB DRVREG -0616 fb79 8e c0 00 LDX #$C000 -0617 fb7c af 4a STX 10,U -0618 fb7e 1f 34 TFR U,S $FB7B -0619 fb80 3b RTI ; -0620 * -0621 ***** LRA LOAD REAL ADDRESS ***** -0622 * -0623 * THE FOLLOWING CODE LOADS THE 20-BIT -0624 * PHYSICAL ADDRESS OF A MEMORY BYTE -0625 * INTO THE "A" AND "X" REGISTERS. THIS -0626 * ROUTINE IS ENTERED WITH THE LOGICAL -0627 * ADDRESS OF A MEMORY BYTE IN THE "IX" -0628 * REGISTER. EXIT IS MADE WITH THE HIGH- -0629 * ORDER FOUR BITS OF THE 20-BIT PHYSICAL -0630 * ADDRESS IN THE "A" REGISTER, AND THE -0631 * LOW-ORDER 16-BITS OF THE 20-BIT -0632 * PHYSICAL ADDRESS IN THE "IX" REGISTER. -0633 * ALL OTHER REGISTERS ARE PRESERVED. -0634 * THIS ROUTINE IS REQUIRED SINCE THE -0635 * DMAF1 AND DMAF2 DISK CONTROLLERS MUST -0636 * PRESENT PHYSICAL ADDRESSES ON THE -0637 * SYSTEM BUS. -0638 * -0639 fb81 34 36 LRA PSHS A,B,X,Y PUSH REGISTERS ON STACK -0640 fb83 a6 62 LDA 2,S GET MSB LOGICAL ADDR FRM X REG ON STACK -0641 fb85 44 LSRA ; -0642 fb86 44 LSRA ADJ FOR INDEXED INTO -0643 fb87 44 LSRA CORRESPONDING LOCATION -0644 fb88 44 LSRA IN LRA TABLE -0645 fb89 10 8e df d0 LDY #LRARAM LOAD LRA TABLE BASE ADDRESS -0646 fb8d e6 a6 LDB A,Y GET PHYSICAL ADDR. DATA FROM LRA TABLE -0647 fb8f 54 LSRB ADJ. REAL ADDR. TO REFLECT EXTENDED -0648 fb90 54 LSRB PHYSICAL ADDRESS. -0649 fb91 54 LSRB EXTENDED MS 4-BITS ARE RETURNED -0650 fb92 54 LSRB IN THE "A" ACCUMULATOR -0651 fb93 e7 e4 STB ,S MS 4 BITS IN A ACCUM. STORED ON STACK -0652 fb95 e6 a6 LDB A,Y LOAD REAL ADDRESS DATA FROM LRA TABLE -0653 fb97 53 COMB COMP TO ADJ FOR PHYSICAL ADDR. IN X REG -0654 fb98 58 ASLB ADJ DATA FOR RELOCATION IN X REG -0655 fb99 58 ASLB ; -0656 fb9a 58 ASLB $FB97 -0657 fb9b 58 ASLB ; -0658 fb9c a6 62 LDA 2,S GET MS BYTE OF LOGICAL ADDR. -0659 fb9e 84 0f ANDA #$0F MASK MS NIBBLE OF LOGICAL ADDRESS -0660 fba0 a7 62 STA 2,S SAVE IT IN X REG ON STACK -0661 fba2 ea 62 ORB 2,S SET MS BYTE IN X REG TO ADJ PHY ADDR. -0662 * -0663 * PLUS LS NIBBLE OF LOGICAL ADDRESS -0664 fba4 e7 62 STB 2,S SAVE AS LS 16 BITS OF PHY ADDR IN X REG -0665 * ON STACK -0666 fba6 35 36 PULS A,B,X,Y POP REGS. FROM STACK -0667 fba8 39 RTS ; -0668 * -0669 * DELAY LOOP -0670 * -0671 fba9 34 04 DLY PSHS B SAVE CONTENTS OF "B" -0672 fbab c6 20 LDB #$20 GET LOOP DELAY VALUE -0673 fbad 5a SUB1 DECB SUBTRACT ONE FROM VALUE -0674 fbae 26 fd BNE SUB1 LOOP UNTIL ZERO -0675 fbb0 35 04 PULS B RESTORE CONTENTS OF "B" -0676 fbb2 39 RTS ; -0677 * -0678 ***** "U" MINIDISK BOOT ***** -0679 * -0680 fbb3 7d e0 18 MINBOOT TST Comreg -0681 fbb6 7f e0 14 CLR Drvreg SELECT DRIVE 0 -0682 * -0683 * DELAY BEFORE ISSUING RESTORE COMMAND -0684 fbb9 c6 03 LDB #3 -0685 fbbb 8e 00 00 LDX #0 -0686 fbbe 30 01 LOOP LEAX 1,X $FBBB -0687 fbc0 8c 00 00 CMPX #0 -0688 fbc3 26 f9 BNE LOOP -0689 fbc5 5a DECB $FBC2 -0690 fbc6 26 f6 BNE LOOP -0691 * -0692 fbc8 86 0f LDA #$0F *LOAD HEAD, VERIFY, 20msec/step -0693 fbca b7 e0 18 STA Comreg ISSUE RESTORE COMMAND -0694 fbcd 8d 37 BSR DELAY -0695 fbcf f6 e0 18 LOOP1 LDB Comreg $FBCC -0696 fbd2 c5 01 BITB #1 -0697 fbd4 26 f9 BNE LOOP1 LOOP UNTIL THRU -0698 fbd6 86 01 LDA #1 -0699 fbd8 b7 e0 1a STA Secreg SET SECTOR REGISTER TO ONE -0700 fbdb 8d 29 BSR DELAY -0701 fbdd 86 8c LDA #$8C LOAD HEAD, DELAY 10msec, -0702 fbdf b7 e0 18 STA Comreg AND READ SINGLE RECORD -0703 fbe2 8d 22 BSR DELAY -0704 fbe4 8e c0 00 LDX #$C000 -0705 fbe7 20 09 BRA LOOP3 -0706 * -0707 fbe9 c5 02 LOOP2 BITB #2 $FBE6 DRQ? -0708 fbeb 27 05 BEQ LOOP3 -0709 fbed b6 e0 1b LDA Datreg -0710 fbf0 a7 80 STA ,X+ -0711 * -0712 fbf2 f6 e0 18 LOOP3 LDB Comreg FETCH STATUS -0713 fbf5 c5 01 BITB #1 BUSY? -0714 fbf7 26 f0 BNE LOOP2 -0715 fbf9 c5 2c BITB #$2C CRC ERROR OR LOST DATA? -0716 fbfb 27 01 BEQ LOOP4 -0717 fbfd 39 RTS ; -0718 fbfe 8e c0 00 LOOP4 LDX #$C000 $FBFB -0719 fc01 af 4a STX 10,U -0720 fc03 1f 34 TFR U,S -0721 fc05 3b RTI ; -0722 * -0723 * DELAY -0724 * -0725 fc06 c6 20 DELAY LDB #$20 -0726 fc08 5a LOOP5 DECB ; -0727 fc09 26 fd BNE LOOP5 -0728 fc0b 39 RTS ; -0729 * -0730 ***** "L" LOAD MIKBUG TAPE ***** -0731 * -0732 fc0c 86 11 LOAD LDA #$11 LOAD 'DC1' CASS. READ ON CODE -0733 fc0e 17 01 dd LBSR OUTCH OUTPUT IT TO TERMINAL PORT -0734 fc11 7f df e2 CLR ECHO TURN OFF ECHO FLAG -0735 fc14 17 01 ad LOAD1 LBSR ECHON INPUT 8 BIT BYTE WITH NO ECHO -0736 fc17 81 53 LOAD2 CMPA #'S IS IT AN "S", START CHARACTER ? -0737 fc19 26 f9 BNE LOAD1 IF NOT, DISCARD AND GET NEXT CHAR. -0738 fc1b 17 01 a6 LBSR ECHON -0739 fc1e 81 39 CMPA #'9 IS IT A "9" , END OF FILE CHAR ? -0740 fc20 27 3d BEQ LOAD21 IF SO, EXIT LOAD -0741 fc22 81 31 CMPA #'1 IS IT A "1" , FILE LOAD CHAR ? -0742 fc24 26 f1 BNE LOAD2 IF NOT, LOOK FOR START CHAR. -0743 fc26 17 01 17 LBSR BYTE INPUT BYTE COUNT -0744 fc29 34 02 PSHS A PUSH COUNT ON STACK -0745 fc2b 29 26 BVS LODERR (V) C-CODE SET, ILLEGAL HEX -0746 fc2d 17 00 ff LBSR IN1ADR INPUT LOAD ADDRESS -0747 fc30 29 21 BVS LODERR (V) C-CODE SET, ADDR NOT HEX -0748 fc32 34 10 PSHS X PUSH ADDR ON STACK -0749 fc34 e6 e0 LDB ,S+ LOAD MSB OF ADDR AS CHECKSUM BYTE -0750 fc36 eb e0 ADDB ,S+ ADD LSB OF ADDR TO CHECKSUM -0751 fc38 eb e4 ADDB ,S ADD BYTE COUNT BYTE TO CHECKSUM -0752 fc3a 6a e4 DEC ,S $FC37 DECREMENT BYTE COUNT 2 TO BYPASS -0753 fc3c 6a e4 DEC ,S ADDRESS BYTES. -0754 fc3e 34 04 LOAD10 PSHS B PUSH CHECKSUM ON STACK -0755 fc40 17 00 fd LBSR BYTE INPUT DATA BYTE (2 HEX CHAR) -0756 fc43 35 04 PULS B POP CHECKSUM FROM STACK -0757 fc45 29 0c BVS LODERR (V) SET, DATA BYTE NOT HEX -0758 fc47 34 02 PSHS A PUSH DATA BYTE ON STACK -0759 fc49 eb e0 ADDB ,S+ ADD DATA TO CHECKSUM, AUTO INC STACK -0760 fc4b 6a e4 DEC ,S DECREMENT BYTE COUNT 1 -0761 fc4d 27 05 BEQ LOAD16 IF BYTE COUNT ZERO, TEST CHECKSUM -0762 fc4f a7 80 STA ,X+ SAVE DATA BYTE IN MEMORY -0763 fc51 20 eb BRA LOAD10 GET NEXT DATA BYTE -0764 fc53 5f LODERR CLRB ;ERROR CONDITION, ZERO CHECKSUM ; -0765 fc54 35 02 LOAD16 PULS A ADJUST STACK (REMOVE BYTE COUNT) -0766 fc56 c1 ff CMPB #$FF CHECKSUM OK? -0767 fc58 27 b2 BEQ LOAD IF SO, LOAD NEXT LINE -0768 fc5a 86 3f LDA #'? LOAD (?) ERROR INDICATOR -0769 fc5c 17 01 8f LBSR OUTCH OUTPUT IT TO TERMINAL -0770 fc5f 73 df e2 LOAD21 COM ECHO TURN ECHO ON -0771 fc62 86 13 LDA #$13 $FC5F LOAD 'DC3' CASS. READ OFF CODE -0772 fc64 16 01 87 LBRA OUTCH OUTPUT IT -0773 * -0774 ***** "P" PUNCH MIKBUG TAPE ***** -0775 * -0776 fc67 6f e2 PUNCH CLR ,-S CLEAR RESERVED BYTE ON STACK -0777 fc69 17 00 b8 LBSR IN2ADR GET BEGIN AND END ADDRESS -0778 fc6c 34 30 PSHS X,Y SAVE ADDRESSES ON STACK -0779 fc6e 29 4a BVS PUNEXT (V) C-CODE SET, EXIT PUNCH -0780 fc70 ac 62 CMPX 2,S COMPARE BEGIN TO END ADDR -0781 fc72 25 46 BCS PUNEXT IF BEGIN GREATER THAN END, EXIT PUNCH -0782 fc74 30 01 LEAX 1,X INCREMENT END ADDRESS -0783 fc76 af e4 STX ,S STORE END ADDR ON STACK -0784 fc78 86 12 LDA #$12 LOAD 'DC2' PUNCH ON CODE -0785 fc7a 17 01 71 LBSR OUTCH OUTPUT IT TO TERMINAL -0786 fc7d ec e4 PUNCH2 LDD ,S LOAD END ADDR IN D-ACC -0787 fc7f a3 62 SUBD 2,S SUBTRACT BEGIN FROM END -0788 fc81 27 06 BEQ PUNCH3 SAME, PUNCH 32 BYTES DEFAULT -0789 fc83 10 83 00 20 CMPD #$20 LESS THAN 32 BYTES? -0790 fc87 23 02 BLS PUNCH4 PUNCH THAT MANY BYTES -0791 fc89 c6 20 PUNCH3 LDB #$20 LOAD BYTE COUNT OF 32. -0792 fc8b e7 64 PUNCH4 STB 4,S STORE ON STACK AS BYTE COUNT -0793 fc8d 8e fe eb LDX #MSG20 POINT TO MSG "S1" -0794 fc90 17 01 1a LBSR PSTRNG PRINT MSG -0795 fc93 cb 03 ADDB #3 ADD 3 BYTES TO BYTE COUNT -0796 fc95 1f 98 TFR B,A GET BYTE COUNT IN A-ACC TO PUNCH -0797 fc97 17 00 e7 LBSR OUT2H OUTPUT BYTE COUNT -0798 fc9a ae 62 LDX 2,S LOAD BEGIN ADDRESS -0799 fc9c 17 00 da LBSR OUT4H PUNCH ADDRESS -0800 fc9f eb 62 ADDB 2,S ADD ADDR MSB TO CHECKSUM -0801 fca1 eb 63 ADDB 3,S ADD ADDR LSB TO CHECKSUM -0802 fca3 eb 84 PUNCHL ADDB ,X ADD DATA BYTE TO CHECKSUM -0803 fca5 a6 80 LDA ,X+ LOAD DATA BYTE TO PUNCH -0804 fca7 17 00 d7 LBSR OUT2H OUTPUT DATA BYTE -0805 fcaa 6a 64 DEC 4,S DECREMENT BYTE COUNT -0806 fcac 26 f5 BNE PUNCHL NOT DONE, PUNCH NEXT BYTE -0807 fcae 53 COMB 1's COMPLIMENT CHECKSUM BYTE -0808 fcaf 1f 98 TFR B,A GET IT IN A-ACC TO PUNCH -0809 fcb1 17 00 cd LBSR OUT2H OUTPUT CHECKSUM BYTE -0810 fcb4 af 62 STX 2,S SAVE X-REG IN STACK AS NEW PUNCH ADDR -0811 fcb6 ac e4 CMPX ,S COMPARE IT TO END ADDR -0812 fcb8 26 c3 BNE PUNCH2 $FCB5 PUNCH NOT DONE, CONT. -0813 fcba 86 14 PUNEXT LDA #$14 LOAD 'DC4' PUNCH OFF CODE -0814 fcbc 17 01 2f LBSR OUTCH OUTPUT IT -0815 fcbf 32 65 LEAS 5,S READJUST STACK POINTER -0816 fcc1 39 RTS ; -0817 * -0818 * -0819 fcc2 8e fe ae PRTSP LDX #MSG10 POINT TO MSG "SP=" -0820 fcc5 17 00 f5 LBSR PDATA PRINT MSG -0821 fcc8 1f 31 TFR U,X -0822 fcca 16 00 ac LBRA OUT4H -0823 fccd 8e fe ba PRTUS LDX #MSG12 POINT TO MSG "US=" -0824 fcd0 17 00 ea LBSR PDATA PRINT MSG -0825 fcd3 ae 48 LDX 8,U -0826 fcd5 16 00 a1 LBRA OUT4H -0827 fcd8 8e fe cc PRTDP LDX #MSG15 POINT TO MSG "DP=" -0828 fcdb 17 00 df LBSR PDATA PRINT MSG -0829 fcde a6 43 LDA 3,U -0830 fce0 16 00 9e LBRA OUT2H OUTPUT HEX BYTE AS ASCII -0831 fce3 8e fe c6 PRTIX LDX #MSG14 POINT TO MSG "IX=" -0832 fce6 17 00 d4 LBSR PDATA PRINT MSG -0833 fce9 ae 44 LDX 4,U $FCE6 -0834 fceb 16 00 8b LBRA OUT4H -0835 fcee 8e fe c0 PRTIY LDX #MSG13 POINT TO MSG "IY=" -0836 fcf1 17 00 c9 LBSR PDATA PRINT MSG -0837 fcf4 ae 46 LDX 6,U -0838 fcf6 16 00 80 LBRA OUT4H -0839 fcf9 8e fe b4 PRTPC LDX #MSG11 POINT TO MSG "PC=" -0840 fcfc 17 00 be LBSR PDATA PRINT MSG -0841 fcff ae 4a LDX 10,U -0842 fd01 20 76 BRA OUT4H -0843 fd03 8e fe d2 PRTA LDX #MSG16 POINT TO MSG "A=" -0844 fd06 17 00 b4 LBSR PDATA PRINT MSG -0845 fd09 a6 41 LDA 1,U -0846 fd0b 20 74 BRA OUT2H OUTPUT HEX BYTE AS ASCII -0847 fd0d 8e fe d7 PRTB LDX #MSG17 POINT TO MSG "B=" -0848 fd10 17 00 aa LBSR PDATA PRINT MSG -0849 fd13 a6 42 LDA 2,U -0850 fd15 20 6a BRA OUT2H OUTPUT HEX BYTE AS ASCII -0851 fd17 8e fe dc PRTCC LDX #MSG18 POINT TO MSG "CC:" -0852 fd1a 17 00 a0 LBSR PDATA PRINT MSG -0853 fd1d a6 c4 LDA ,U -0854 fd1f 8e fe e3 LDX #MSG19 POINT TO MSG "EFHINZVC" -0855 fd22 20 73 BRA BIASCI OUTPUT IN BINARY/ASCII FORMAT -0856 * -0857 * THE FOLLOWING ROUTINE LOOPS WAITING FOR THE -0858 * OPERATOR TO INPUT TWO VALID HEX ADDRESSES. -0859 * THE FIRST ADDRESS INPUT IS RETURNED IN "IY". -0860 * THE SECOND IS RETURNED IN "IX". THE "V" BIT -0861 * IN THE C-CODE REG. IS SET IF AN INVALID HEX -0862 * ADDRESS IS INPUT. -0863 * -0864 fd24 8d 09 IN2ADR BSR IN1ADR GET FIRST ADDRESS -0865 fd26 29 4e BVS NOTHEX EXIT IF NOT VALID HEX -0866 fd28 1f 12 TFR X,Y SAVE FIRST ADDR. IN "IY" -0867 fd2a 86 2d LDA #'- -0868 fd2c 17 00 bf LBSR OUTCH PRINT " - " -0869 * -0870 * THE FOLLOWING ROUTINE LOOPS WAITING FOR THE -0871 * OPERATOR TO INPUT ONE VALID HEX ADDRESS. THE -0872 * ADDRESS IS RETURNED IN THE "X" REGISTER. -0873 * -0874 fd2f 8d 0f IN1ADR BSR BYTE INPUT BYTE (2 HEX CHAR) -0875 fd31 29 43 BVS NOTHEX EXIT IF NOT VALID HEX -0876 fd33 1f 01 TFR D,X -0877 fd35 8d 09 BSR BYTE INPUT BYTE (2 HEX CHAR) -0878 fd37 29 3d BVS NOTHEX -0879 fd39 34 10 PSHS X -0880 fd3b a7 61 STA 1,S -0881 fd3d 35 10 PULS X -0882 fd3f 39 RTS ; -0883 * -0884 ***** INPUT BYTE (2 HEX CHAR.) ***** -0885 * -0886 fd40 8d 11 BYTE BSR INHEX GET HEX LEFT -0887 fd42 29 32 BVS NOTHEX EXIT IF NOT VALID HEX -0888 fd44 48 ASLA ; -0889 fd45 48 ASLA ; -0890 fd46 48 ASLA ; SHIFT INTO LEFT NIBBLE -0891 fd47 48 ASLA ; -0892 fd48 1f 89 TFR A,B PUT HEXL IN "B" -0893 fd4a 8d 07 BSR INHEX GET HEX RIGHT -0894 fd4c 29 28 BVS NOTHEX EXIT IF NOT VALID HEX -0895 fd4e 34 04 PSHS B PUSH HEXL ON STACK -0896 fd50 ab e0 ADDA ,S+ ADD HEXL TO HEXR AND ADJ. STK -0897 fd52 39 RTS RETURN WITH HEX L&R IN "A" -0898 * -0899 * -0900 fd53 8d 6f INHEX BSR ECHON INPUT ASCII CHAR. -0901 fd55 81 30 CMPA #'0 IS IT > OR = "0" ? -0902 fd57 25 1d BCS NOTHEX IF LESS IT AIN'T HEX -0903 fd59 81 39 CMPA #'9 IS IT < OR = "9" ? -0904 fd5b 22 03 BHI INHEXA IF > MAYBE IT'S ALPHA -0905 fd5d 80 30 SUBA #$30 ASCII ADJ. NUMERIC -0906 fd5f 39 RTS ; -0907 * -0908 * -0909 fd60 81 41 INHEXA CMPA #'A IS IT > OR = "A" -0910 fd62 25 12 BCS NOTHEX IF LESS IT AIN'T HEX -0911 fd64 81 46 CMPA #'F IS IT < OR = "F" ? -0912 fd66 22 03 BHI INHEXL IF > IT AIN'T HEX -0913 fd68 80 37 SUBA #$37 ASCII ADJ. ALPHA -0914 fd6a 39 RTS ; -0915 * -0916 fd6b 81 61 INHEXL CMPA #'a IS IT > OR = "a" -0917 fd6d 25 07 BCS NOTHEX IF LESS IT AIN'T HEX -0918 fd6f 81 66 CMPA #'f IS IT < "f" -0919 fd71 22 03 BHI NOTHEX IF > IT AIN'T HEX -0920 fd73 80 57 SUBA #$57 ADJUST TO LOWER CASE -0921 fd75 39 RTS ; -0922 * -0923 * -0924 fd76 1a 02 NOTHEX ORCC #2 SET (V) FLAG IN C-CODES REGISTER -0925 fd78 39 RTS ; -0926 * -0927 * -0928 fd79 34 10 OUT4H PSHS X PUSH X-REG. ON THE STACK -0929 fd7b 35 02 PULS A POP MS BYTE OF X-REG INTO A-ACC. -0930 fd7d 8d 02 BSR OUTHL OUTPUT HEX LEFT -0931 fd7f 35 02 PULS A POP LS BYTE OF X-REG INTO A-ACC. -0932 fd81 OUTHL EQU * -0933 fd81 34 02 OUT2H PSHS A SAVE IT BACK ON STACK -0934 fd83 44 LSRA CONVERT UPPER HEX NIBBLE TO ASCII -0935 fd84 44 LSRA ; -0936 fd85 44 LSRA ; -0937 fd86 44 LSRA ; -0938 fd87 8d 04 BSR XASCII PRINT HEX NIBBLE AS ASCII -0939 fd89 35 02 OUTHR PULS A CONVERT LOWER HEX NIBBLE TO ASCII -0940 fd8b 84 0f ANDA #$0F STRIP LEFT NIBBLE -0941 fd8d 8b 30 XASCII ADDA #$30 ASCII ADJ -0942 fd8f 81 39 CMPA #$39 IS IT < OR = "9" ? -0943 fd91 2f 02 BLE OUTC IF LESS, OUTPUT IT -0944 fd93 8b 07 ADDA #7 IF > MAKE ASCII LETTER -0945 fd95 20 57 OUTC BRA OUTCH OUTPUT CHAR -0946 * -0947 * BINARY / ASCII --- THIS ROUTINE -0948 * OUTPUTS A BYTE IN ENHANCED -0949 * BINARY FORMAT. THE ENHANCEMENT -0950 * IS DONE BY SUBSTITUTING ASCII -0951 * LETTERS FOR THE ONES IN THE BYTE. -0952 * THE ASCII ENHANCEMENT LETTERS -0953 * ARE OBTAINED FROM THE STRING -0954 * POINTED TO BY THE INDEX REG. "X". -0955 * -0956 fd97 34 02 BIASCI PSHS A SAVE "A" ON STACK -0957 fd99 c6 08 LDB #8 PRESET LOOP# TO BITS PER BYTE -0958 fd9b a6 80 OUTBA LDA ,X+ GET LETTER FROM STRING -0959 fd9d 68 e4 ASL ,S TEST BYTE FOR "1" IN B7 -0960 fd9f 25 02 BCS PRTBA IF ONE PRINT LETTER -0961 fda1 86 2d LDA #'- IF ZERO PRINT "-" -0962 fda3 8d 49 PRTBA BSR OUTCH PRINT IT -0963 fda5 8d 45 BSR OUT1S PRINT SPACE -0964 fda7 5a DECB SUB 1 FROM #BITS YET TO PRINT -0965 fda8 26 f1 BNE OUTBA -0966 fdaa 35 02 PULS A -0967 fdac 39 RTS -0968 * -0969 * PRINT STRING PRECEEDED BY A CR & LF. -0970 * -0971 fdad 8d 02 PSTRNG BSR PCRLF PRINT CR/LF -0972 fdaf 20 0c BRA PDATA PRINT STRING POINTED TO BY IX -0973 * -0974 * PCRLF -0975 * -0976 fdb1 34 10 PCRLF PSHS X SAVE IX -0977 fdb3 8e fe 75 LDX #MSG2+1 POINT TO MSG CR/LF + 3 NULS -0978 fdb6 8d 05 BSR PDATA PRINT MSG -0979 fdb8 35 10 PULS X RESTORE IX -0980 fdba 39 RTS ; -0981 fdbb 8d 31 PRINT BSR OUTCH -0982 * -0983 * PDATA -0984 * -0985 fdbd a6 80 PDATA LDA ,X+ GET 1st CHAR. TO PRINT -0986 fdbf 81 04 CMPA #4 IS IT EOT? -0987 fdc1 26 f8 BNE PRINT IF NOT EOT PRINT IT -0988 fdc3 39 RTS ; -0989 * -0990 * -0991 fdc4 7d df e2 ECHON TST ECHO IS ECHO REQUIRED ? -0992 fdc7 27 06 BEQ INCH ECHO NOT REQ. IF CLEAR -0993 * -0994 * INCHE -0995 * -0996 * ---GETS CHARACTER FROM TERMINAL AND -0997 * ECHOS SAME. THE CHARACTER IS RETURNED -0998 * IN THE "A" ACCUMULATOR WITH THE PARITY -0999 * BIT MASKED OFF. ALL OTHER REGISTERS -1000 * ARE PRESERVED. -1001 * -1002 fdc9 8d 04 INCHE BSR INCH GET CHAR FROM TERMINAL -1003 fdcb 84 7f ANDA #$7F STRIP PARITY FROM CHAR. -1004 fdcd 20 1f BRA OUTCH ECHO CHAR TO TERMINAL -1005 * -1006 * INCH -1007 * -1008 * GET CHARACTER FROM TERMINAL. RETURN -1009 * CHARACTER IN "A" ACCUMULATOR AND PRESERVE -1010 * ALL OTHER REGISTERS. THE INPUT CHARACTER -1011 * IS 8 BITS AND IS NOT ECHOED. -1012 * -1013 * -1014 fdcf 34 10 INCH PSHS X SAVE IX -1015 fdd1 be df e0 LDX CPORT POINT TO TERMINAL PORT -1016 fdd4 a6 84 GETSTA LDA ,X FETCH PORT STATUS -1017 fdd6 85 01 BITA #1 TEST READY BIT, RDRF ? -1018 fdd8 27 fa BEQ GETSTA IF NOT RDY, THEN TRY AGAIN -1019 fdda a6 01 LDA 1,X FETCH CHAR -1020 fddc 35 10 PULS X RESTORE IX -1021 fdde 39 RTS ; -1022 * -1023 * INCHEK -1024 * -1025 * CHECK FOR A CHARACTER AVAILABLE FROM -1026 * THE TERMINAL. THE SERIAL PORT IS CHECKED -1027 * FOR READ READY. ALL REGISTERS ARE -1028 * PRESERVED, AND THE "Z" BIT WILL BE -1029 * CLEAR IF A CHARACTER CAN BE READ. -1030 * -1031 * -1032 fddf 34 02 INCHEK PSHS A SAVE A ACCUM. -1033 fde1 a6 9f df e0 LDA [CPORT] FETCH PORT STATUS -1034 fde5 85 01 BITA #1 TEST READY BIT, RDRF ? -1035 fde7 35 02 PULS A RESTORE A ACCUM. -1036 fde9 39 RTS ; -1037 * -1038 fdea 8d 00 OUT2S BSR OUT1S OUTPUT 2 SPACES -1039 fdec 86 20 OUT1S LDA #$20 OUTPUT 1 SPACE -1040 * -1041 * -1042 * OUTCH -1043 * -1044 * OUTPUT CHARACTER TO TERMINAL. -1045 * THE CHAR. TO BE OUTPUT IS -1046 * PASSED IN THE A REGISTER. -1047 * ALL REGISTERS ARE PRESERVED. -1048 * -1049 fdee 34 12 OUTCH PSHS A,X SAVE A ACCUM AND IX -1050 fdf0 be df e0 LDX CPORT GET ADDR. OF TERMINAL -1051 fdf3 a6 84 FETSTA LDA ,X FETCH PORT STATUS -1052 fdf5 85 02 BITA #2 TEST TDRE, OK TO XMIT ? -1053 fdf7 27 fa BEQ FETSTA IF NOT LOOP UNTIL RDY -1054 fdf9 35 02 PULS A GET CHAR. FOR XMIT -1055 fdfb a7 01 STA 1,X XMIT CHAR. -1056 fdfd 35 10 PULS X RESTORE IX -1057 fdff 39 RTS ; -1058 * -1059 * -1060 fe00 be df e0 ACINIZ LDX CPORT POINT TO CONTROL PORT ADDRESS -1061 fe03 86 03 LDA #3 RESET ACIA PORT CODE -1062 fe05 a7 84 STA ,X STORE IN CONTROL REGISTER -1063 fe07 86 11 LDA #$11 SET 8 DATA, 2 STOP AN 0 PARITY -1064 fe09 a7 84 STA ,X STORE IN CONTROL REGISTER -1065 fe0b 6d 01 TST 1,X ANYTHING IN DATA REGISTER? -1066 fe0d 86 ff LDA #$FF TURN ON ECHO FLAG -1067 fe0f b7 df e2 STA ECHO -1068 fe12 39 RTS -1069 * -1070 * -1071 * MONITOR KEYBOARD COMMAND JUMP TABLE -1072 * -1073 * -1074 fe13 JMPTAB EQU * -1075 fe13 01 FCB 1 " ^A " $F91D -1076 fe14 f9 23 FDB ALTRA -1077 fe16 02 FCB 2 " ^B " $F90F -1078 fe17 f9 15 FDB ALTRB -1079 fe19 03 FCB 3 " ^C " $F92B -1080 fe1a f9 31 FDB ALTRCC -1081 fe1c 04 FCB 4 " ^D " $F901 -1082 fe1d f9 07 FDB ALTRDP -1083 fe1f 10 FCB $10 " ^P " $F8C9 -1084 fe20 f8 cf FDB ALTRPC -1085 fe22 15 FCB $15 " ^U " $F8D7 -1086 fe23 f8 dd FDB ALTRU -1087 fe25 18 FCB $18 " ^X " $F8F3 -1088 fe26 f8 f9 FDB ALTRX -1089 fe28 19 FCB $19 " ^Y " $F8E5 -1090 fe29 f8 eb FDB ALTRY -1091 * -1092 fe2b 42 FCC 'B' -1093 fe2c fa 7b FDB BRKPNT *$FA78 -1094 fe2e 44 FCC 'D' -1095 fe2f fa f4 FDB DBOOT *$FAF1 -1096 fe31 45 FCC 'E' -1097 fe32 f9 96 FDB MEMDUMP *$F990 -1098 fe34 47 FCC 'G' -1099 fe35 f8 a5 FDB GO *$F89F -1100 fe37 4c FCC 'L' -1101 fe38 fc 0c FDB LOAD *$FC09 -1102 fe3a 4d FCC 'M' -1103 fe3b f9 41 FDB MEMCHG *$F93B -1104 fe3d 50 FCC 'P' -1105 fe3e fc 67 FDB PUNCH *$FC64 -1106 fe40 51 FCC 'Q' -1107 fe41 f9 f2 FDB MEMTST *$F9EF -1108 fe43 52 FCC 'R' -1109 fe44 f8 a8 FDB REGSTR *$F8A2 -1110 fe46 53 FCC 'S' -1111 fe47 f9 8a FDB DISSTK *$F984 -1112 fe49 55 FCC 'U' -1113 fe4a fb b3 FDB MINBOOT *$FBB0 -1114 fe4c 58 FCC 'X' -1115 fe4d fa a7 FDB XBKPNT *$FAA4 -1116 * -1117 fe4f TABEND EQU * -1118 * -1119 * ** 6809 VECTOR ADDRESSES ** -1120 * -1121 * FOLLOWING ARE THE ADDRESSES OF THE VECTOR ROUTINES -1122 * FOR THE 6809 PROCESSOR. DURING INITIALIZATION THEY -1123 * ARE RELOCATED TO RAM FROM $DFC0 TO $DFCF. THEY ARE -1124 * RELOCATED TO RAM SO THAT THE USER MAY REVECTOR TO -1125 * HIS OWN ROUTINES IF HE SO DESIRES. -1126 * -1127 * -1128 fe4f fa b3 RAMVEC FDB SWIE USER-V -1129 fe51 f8 a7 FDB RTI SWI3-V -1130 fe53 f8 a7 FDB RTI SWI2-V -1131 fe55 f8 a7 FDB RTI FIRQ-V -1132 fe57 f8 a7 FDB RTI IRQ-V -1133 fe59 fa b3 FDB SWIE SWI-V -1134 fe5b ff ff FDB $FFFF SVC-VO -1135 fe5d ff ff FDB $FFFF SVC-VL -1136 * -1137 * PRINTABLE MESSAGE STRINGS -1138 * -1139 fe5f 00 00 00 0d 0a 00 MSG1 FCB $0,$0,$0,$D,$A,$0,$0,$0 * 0, CR/LF, 0 - 00 00 -1140 fe67 53 2d 42 55 47 20 FCC 'S-BUG 1.8 - ' - 31 2e 38 20 2d 20 -1141 fe73 04 FCB 4 -1142 fe74 4b 0d 0a 00 00 00 MSG2 FCB 'K,$D,$A,$0,$0,$0,4 K, * CR/LF + 3 NULS - 04 -1143 fe7b 3e MSG3 FCC '>' -1144 fe7c 04 FCB 4 -1145 fe7d 57 48 41 54 3f MSG4 FCC 'WHAT?' -1146 fe82 04 FCB 4 -1147 fe83 20 2d 20 MSG5 FCC ' - ' -1148 fe86 04 FCB 4' -1149 fe87 2c 20 50 41 53 53 MSG6 FCC ', PASS ' - 20 -1150 fe8e 04 FCB 4 -1151 fe8f 2c 20 42 49 54 53 MSG7 FCC ', BITS IN ERROR: ' - 20 49 4e 20 45 52 - 52 4f 52 3a 20 -1152 fea0 04 FCB 4 -1153 fea1 20 3d 3e 20 MSG8 FCC ' => ' -1154 fea5 04 FCB 4 -1155 fea6 37 36 35 34 33 32 MSG9 FCC '76543210' - 31 30 -1156 feae 20 20 53 50 3d MSG10 FCC ' SP=' -1157 feb3 04 FCB 4 -1158 feb4 20 20 50 43 3d MSG11 FCC ' PC=' -1159 feb9 04 FCB 4 -1160 feba 20 20 55 53 3d MSG12 FCC ' US=' -1161 febf 04 FCB 4 -1162 fec0 20 20 49 59 3d MSG13 FCC ' IY=' -1163 fec5 04 FCB 4 -1164 fec6 20 20 49 58 3d MSG14 FCC ' IX=' -1165 fecb 04 FCB 4 -1166 fecc 20 20 44 50 3d MSG15 FCC ' DP=' -1167 fed1 04 FCB 4 -1168 fed2 20 20 41 3d MSG16 FCC ' A=' -1169 fed6 04 FCB 4 -1170 fed7 20 20 42 3d MSG17 FCC ' B=' -1171 fedb 04 FCB 4 -1172 fedc 20 20 43 43 3a 20 MSG18 FCC ' CC: ' -1173 fee2 04 FCB 4 -1174 fee3 45 46 48 49 4e 5a MSG19 FCC 'EFHINZVC' - 56 43 -1175 feeb 53 31 MSG20 FCC 'S1' -1176 feed 04 FCB 4 -1177 * -1178 * MESSAGE EXPANSION AREA -1179 * -1180 feee ff ff ff ff ff ff FCB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF - ff ff -1181 fef6 ff ff ff ff ff ff FCB $FF,$FF,$FF,$FF,$FF,$FF,$FF - ff -1182 * -1183 * POWER UP/ RESET/ NMI ENTRY POINT -1184 * -1185 ff00 ORG $FF00 -1186 * -1187 * -1188 ff00 8e ff f0 START LDX #IC11 POINT TO DAT RAM IC11 -1189 ff03 86 0f LDA #$F GET COMPLIMENT OF ZERO -1190 * -1191 * -1192 * INITIALIZE DAT RAM --- LOADS $F-$0 IN LOCATIONS $0-$F -1193 * OF DAT RAM, THUS STORING COMPLEMENT OF MSB OF ADDRESS -1194 * IN THE DAT RAM. THE COMPLEMENT IS REQUIRED BECAUSE THE -1195 * OUTPUT OF IC11, A 74S189, IS THE INVERSE OF THE DATA -1196 * STORED IN IT. -1197 * -1198 * -1199 ff05 a7 80 DATLP STA ,X+ STORE & POINT TO NEXT RAM LOCATION -1200 ff07 4a DECA GET COMP. VALUE FOR NEXT LOCATION -1201 ff08 26 fb BNE DATLP ALL 16 LOCATIONS INITIALIZED ? -1202 * -1203 * NOTE: IX NOW CONTAINS $0000, DAT RAM IS NO LONGER -1204 * ADDRESSED, AND LOGICAL ADDRESSES NOW EQUAL -1205 * PHYSICAL ADDRESSES. -1206 * -1207 ff0a 86 f0 LDA #$F0 -1208 ff0c a7 84 STA ,X STORE $F0 AT $FFFF -1209 ff0e 8e d0 a0 LDX #$D0A0 ASSUME RAM TO BE AT $D000-$DFFF -1210 ff11 10 8e 55 aa LDY #TSTPAT LOAD TEST DATA PATTERN INTO "Y" -1211 ff15 ee 84 TSTRAM LDU ,X SAVE DATA FROM TEST LOCATION -1212 ff17 10 af 84 STY ,X STORE TEST PATTERN AT $D0A0 -1213 ff1a 10 ac 84 CMPY ,X IS THERE RAM AT THIS LOCATION ? -1214 ff1d 27 0b BEQ CNVADR IF MATCH THERE'S RAM, SO SKIP -1215 ff1f 30 89 f0 00 LEAX -$1000,X ELSE POINT 4K LOWER -1216 ff23 8c f0 a0 CMPX #$F0A0 DECREMENTED PAST ZER0 YET ? -1217 ff26 26 ed BNE TSTRAM IF NOT CONTINUE TESTING FOR RAM -1218 ff28 20 d6 BRA START ELSE START ALL OVER AGAIN -1219 * -1220 * -1221 * THE FOLLOWING CODE STORES THE COMPLEMENT OF -1222 * THE MS CHARACTER OF THE FOUR CHARACTER HEX -1223 * ADDRESS OF THE FIRST 4K BLOCK OF RAM LOCATED -1224 * BY THE ROUTINE "TSTRAM" INTO THE DAT RAM. IT -1225 * IS STORED IN RAM IN THE LOCATION THAT IS -1226 * ADDRESSED WHEN THE PROCESSOR ADDRESS IS $D---, -1227 * THUS IF THE FIRST 4K BLOCK OF RAM IS FOUND -1228 * WHEN TESTING LOCATION $70A0, MEANING THERE -1229 * IS NO RAM PHYSICALLY ADDRESSED IN THE RANGE -1230 * $8000-$DFFF, THEN THE COMPLEMENT OF THE -1231 * "7" IN THE $70A0 WILL BE STORED IN -1232 * THE DAT RAM. THUS WHEN THE PROCESSOR OUTPUTS -1233 * AN ADDRESS OF $D---, THE DAT RAM WILL RESPOND -1234 * BY RECOMPLEMENTING THE "7" AND OUTPUTTING THE -1235 * 7 ONTO THE A12-A15 ADDRESS LINES. THUS THE -1236 * RAM THAT IS PHYSICALLY ADDRESSED AT $7--- -1237 * WILL RESPOND AND APPEAR TO THE 6809 THAT IT -1238 * IS AT $D--- SINCE THAT IS THE ADDRESS THE -1239 * 6809 WILL BE OUTPUTING WHEN THAT 4K BLOCK -1240 * OF RAM RESPONDS. -1241 * -1242 * -1243 ff2a ef 84 CNVADR STU ,X RESTORE DATA AT TEST LOCATION -1244 ff2c 1f 10 TFR X,D PUT ADDR. OF PRESENT 4K BLOCK IN D -1245 ff2e 43 COMA COMPLEMENT MSB OF THAT ADDRESS -1246 ff2f 44 LSRA PUT MS 4 BITS OF ADDRESS IN -1247 ff30 44 LSRA LOCATION D0-D3 TO ALLOW STORING -1248 ff31 44 LSRA IT IN THE DYNAMIC ADDRESS -1249 ff32 44 LSRA TRANSLATION RAM. -1250 ff33 b7 ff fd STA $FFFD STORE XLATION FACTOR IN DAT "D" -1251 * -1252 ff36 10 ce df c0 LDS #STACK INITIALIZE STACK POINTER -1253 * -1254 * -1255 * THE FOLLOWING CHECKS TO FIND THE REAL PHYSICAL ADDRESSES -1256 * OF ALL 4K BLKS OF RAM IN THE SYSTEM. WHEN EACH 4K BLK -1257 * OF RAM IS LOCATED, THE COMPLEMENT OF IT'S REAL ADDRESS -1258 * IS THEN STORED IN A "LOGICAL" TO "REAL" ADDRESS XLATION -1259 * TABLE THAT IS BUILT FROM $DFD0 TO $DFDF. FOR EXAMPLE IF -1260 * THE SYSTEM HAS RAM THAT IS PHYSICALLY LOCATED (WIRED TO -1261 * RESPOND) AT THE HEX LOCATIONS $0--- THRU $F---.... -1262 * -1263 * 0 1 2 3 4 5 6 7 8 9 A B C D E F -1264 * 4K 4K 4K 4K 4K 4K 4K 4K -- 4K 4K 4K 4K -- -- -- -1265 * -1266 * ....FOR A TOTAL OF 48K OF RAM, THEN THE TRANSLATION TABLE -1267 * CREATED FROM $DFD0 TO $DFDF WILL CONSIST OF THE FOLLOWING.... -1268 * -1269 * 0 1 2 3 4 5 6 7 8 9 A B C D E F -1270 * 0F 0E 0D 0C 0B 0A 09 08 06 05 00 00 04 03 F1 F0 -1271 * -1272 * -1273 * HERE WE SEE THE LOGICAL ADDRESSES OF MEMORY FROM $0000-$7FFF -1274 * HAVE NOT BEEN SELECTED FOR RELOCATION SO THAT THEIR PHYSICAL -1275 * ADDRESS WILL = THEIR LOGICAL ADDRESS; HOWEVER, THE 4K BLOCK -1276 * PHYSICALLY AT $9000 WILL HAVE ITS ADDRESS TRANSLATED SO THAT -1277 * IT WILL LOGICALLY RESPOND AT $8000. LIKEWISE $A,$B, AND $C000 -1278 * WILL BE TRANSLATED TO RESPOND TO $9000,$C000, AND $D000 -1279 * RESPECTIVELY. THE USER SYSTEM WILL LOGICALLY APPEAR TO HAVE -1280 * MEMORY ADDRESSED AS FOLLOWS.... -1281 * -1282 * 0 1 2 3 4 5 6 7 8 9 A B C D E F -1283 * 4K 4K 4K 4K 4K 4K 4K 4K 4K 4K -- -- 4K 4K -- -- -1284 * -1285 * -1286 ff3a 10 8e df d0 LDY #LRARAM POINT TO LOGICAL/REAL ADDR. TABLE -1287 ff3e a7 2d STA 13,Y STORE $D--- XLATION FACTOR AT $DFDD -1288 ff40 6f 2e CLR 14,Y CLEAR $DFDE -1289 ff42 86 f0 LDA #$F0 DESTINED FOR IC8 AN MEM EXPANSION ? -1290 ff44 a7 2f STA 15,Y STORE AT $DFDF -1291 ff46 86 0c LDA #$0C PRESET NUMBER OF BYTES TO CLEAR -1292 ff48 6f a6 CLRLRT CLR A,Y CLEAR $DFDC THRU $DFD0 -1293 ff4a 4a DECA SUB. 1 FROM BYTES LEFT TO CLEAR -1294 ff4b 2a fb BPL CLRLRT CONTINUE IF NOT DONE CLEARING -1295 ff4d 30 89 f0 00 FNDRAM LEAX -$1000,X POINT TO NEXT LOWER 4K OF RAM -1296 ff51 8c f0 a0 CMPX #$F0A0 TEST FOR DECREMENT PAST ZERO -1297 ff54 27 22 BEQ FINTAB SKIP IF FINISHED -1298 ff56 ee 84 LDU ,X SAVE DATA AT CURRENT TEST LOCATION -1299 ff58 10 8e 55 aa LDY #TSTPAT LOAD TEST DATA PATTERN INTO Y REG. -1300 ff5c 10 af 84 STY ,X STORE TEST PATT. INTO RAM TEST LOC. -1301 ff5f 10 ac 84 CMPY ,X VERIFY RAM AT TEST LOCATION -1302 ff62 26 e9 BNE FNDRAM IF NO RAM GO LOOK 4K LOWER -1303 ff64 ef 84 STU ,X ELSE RESTORE DATA TO TEST LOCATION -1304 ff66 10 8e df d0 LDY #LRARAM POINT TO LOGICAL/REAL ADDR. TABLE -1305 ff6a 1f 10 TFR X,D PUT ADDR. OF PRESENT 4K BLOCK IN D -1306 ff6c 44 LSRA PUT MS 4 BITS OF ADDR. IN LOC. D0-D3 -1307 ff6d 44 LSRA TO ALLOW STORING IT IN THE DAT RAM. -1308 ff6e 44 LSRA -1309 ff6f 44 LSRA -1310 ff70 1f 89 TFR A,B SAVE OFFSET INTO LRARAM TABLE -1311 ff72 88 0f EORA #$0F INVERT MSB OF ADDR. OF CURRENT 4K BLK -1312 ff74 a7 a5 STA B,Y SAVE TRANSLATION FACTOR IN LRARAM TABLE -1313 ff76 20 d5 BRA FNDRAM GO TRANSLATE ADDR. OF NEXT 4K BLK -1314 ff78 86 f1 FINTAB LDA #$F1 DESTINED FOR IC8 AND MEM EXPANSION ? -1315 ff7a 10 8e df d0 LDY #LRARAM POINT TO LRARAM TABLE -1316 ff7e a7 2e STA 14,Y STORE $F1 AT $DFCE -1317 * -1318 * THE FOLLOWING CHECKS TO SEE IF THERE IS A 4K BLK OF -1319 * RAM LOCATED AT $C000-$CFFF. IF NONE THERE IT LOCATES -1320 * THE NEXT LOWER 4K BLK AN XLATES ITS ADDR SO IT -1321 * LOGICALLY RESPONDS TO THE ADDRESS $C---. -1322 * -1323 * -1324 ff80 86 0c LDA #$0C PRESET NUMBER HEX "C" -1325 ff82 e6 a6 FINDC LDB A,Y GET ENTRY FROM LRARAM TABLE -1326 ff84 26 05 BNE FOUNDC BRANCH IF RAM THIS PHYSICAL ADDR. -1327 ff86 4a DECA ELSE POINT 4K LOWER -1328 ff87 2a f9 BPL FINDC GO TRY AGAIN -1329 ff89 20 14 BRA XFERTF -1330 ff8b 6f a6 FOUNDC CLR A,Y CLR XLATION FACTOR OF 4K BLOCK FOUND -1331 ff8d e7 2c STB $C,Y GIVE IT XLATION FACTOR MOVING IT TO $C--- -1332 * -1333 * THE FOLLOWING CODE ADJUSTS THE TRANSLATION -1334 * FACTORS SUCH THAT ALL REMAINING RAM WILL -1335 * RESPOND TO A CONTIGUOUS BLOCK OF LOGICAL -1336 * ADDRESSES FROM $0000 AND UP.... -1337 * -1338 ff8f 4f CLRA START AT ZERO -1339 ff90 1f 21 TFR Y,X START POINTER "X" START OF "LRARAM" TABLE. -1340 ff92 e6 a6 COMPRS LDB A,Y GET ENTRY FROM "LRARAM" TABLE -1341 ff94 27 04 BEQ PNTNXT IF IT'S ZER0 SKIP -1342 ff96 6f a6 CLR A,Y ELSE ERASE FROM TABLE -1343 ff98 e7 80 STB ,X+ AND ENTER ABOVE LAST ENTRY- BUMP -1344 ff9a 4c PNTNXT INCA GET OFFSET TO NEXT ENTRY -1345 ff9b 81 0c CMPA #$0C LAST ENTRY YET ? -1346 ff9d 2d f3 BLT COMPRS -1347 * -1348 * THE FOLLOWING CODE TRANSFER THE TRANSLATION -1349 * FACTORS FROM THE LRARAM TABLE TO IC11 ON -1350 * THE MP-09 CPU CARD. -1351 * -1352 ff9f 8e ff f0 XFERTF LDX #IC11 POINT TO DAT RAM IC11 -1353 ffa2 c6 10 LDB #$10 GET NO. OF BYTES TO MOVE -1354 ffa4 a6 a0 FETCH LDA ,Y+ GET BYTE AND POINT TO NEXT -1355 ffa6 a7 80 STA ,X+ POKE XLATION FACTOR IN IC11 -1356 ffa8 5a DECB SUB 1 FROM BYTES TO MOVE -1357 ffa9 26 f9 BNE FETCH CONTINUE UNTIL 16 MOVED -1358 ffab 53 COMB SET "B" NON-ZERO -1359 ffac f7 df e2 STB ECHO TURN ON ECHO FLAG -1360 ffaf 16 f8 62 LBRA MONITOR INITIALIZATION IS COMPLETE -1361 * -1362 * -1363 ffb2 6e 9f df c0 V1 JMP [STACK] -1364 ffb6 6e 9f df c4 V2 JMP [SWI2] -1365 ffba 6e 9f df c6 V3 JMP [FIRQ] -1366 ffbe 6e 9f df c8 V4 JMP [IRQ] -1367 ffc2 6e 9f df ca V5 JMP [SWI] -1368 * -1369 * SWI3 ENTRY POINT -1370 * -1371 ffc6 1f 43 SWI3E TFR S,U -1372 ffc8 ae 4a LDX 10,U *$FFC8 -1373 ffca e6 80 LDB ,X+ -1374 ffcc af 4a STX 10,U -1375 ffce 4f CLRA -1376 ffcf 58 ASLB -1377 ffd0 49 ROLA -1378 ffd1 be df cc LDX SVCVO -1379 ffd4 8c ff ff CMPX #$FFFF -1380 ffd7 27 0f BEQ SWI3Z -1381 ffd9 30 8b LEAX D,X -1382 ffdb bc df ce CMPX SVCVL -1383 ffde 22 08 BHI SWI3Z -1384 ffe0 34 10 PSHS X -1385 ffe2 ec c4 LDD ,U -1386 ffe4 ae 44 LDX 4,U -1387 ffe6 6e f1 JMP [,S++] -1388 ffe8 37 1f SWI3Z PULU A,B,X,CC,DP -1389 ffea ee 42 LDU 2,U -1390 ffec 6e 9f df c2 JMP [SWI3] -1391 * -1392 * 6809 VECTORS -1393 * -1394 fff0 ff b2 FDB V1 USER-V -1395 fff2 ff c6 FDB SWI3E SWI3-V -1396 fff4 ff b6 FDB V2 SWI2-V -1397 fff6 ff ba FDB V3 FIRQ-V -1398 fff8 ff be FDB V4 IRQ-V -1399 fffa ff c2 FDB V5 SWI-V -1400 fffc ff b2 FDB V1 NMI-V -1401 fffe ff 00 FDB START RESTART-V -1402 END START Index: trunk/sw/asref.man =================================================================== --- trunk/sw/asref.man (revision 2) +++ trunk/sw/asref.man (nonexistent) @@ -1,2245 +0,0 @@ - - - - - - - - - - MOTOROLA - - FREEWARE - - 8-BIT CROSS ASSEMBLERS - - USER'S MANUAL - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - EDITED BY - - KEVIN ANDERSON - - FIELD APPLICATIONS ENGINEER - - - - - - - - - - - - - - - - TABLE OF CONTENTS - -CHAPTER 1......................................................... 1 - - 1.1 INTRODUCTION .......................................... 1 - 1.2 ASSEMBLY LANGUAGE ..................................... 1 - 1.3 OPERATING ENVIRONMENT ................................. 2 - 1.4 ASSEMBLER PROCESSING .................................. 2 - -CHAPTER 2 ........................................................ 3 - - 2.1 INTRODUCTION .......................................... 3 - 2.2 SOURCE STATEMENT FORMAT ............................... 3 - 2.2.1 Label Field .................................... 3 - 2.2.2 Operation Field ................................ 4 - 2.2.3 Operand Field .................................. 4 - 2.2.3.1 M6800/6801 Operand Syntax ................ 5 - 2.2.3.2 M6800/M68HC04 Operand Syntax ............. 5 - 2.2.3.3 M6805/M68HC05 Operand Syntax ............. 5 - 2.2.3.4 M6809 Operand Syntax ..................... 5 - 2.2.3.5 M68HC11 Operand Syntax ................... 6 - 2.2.3.6 Expressions .............................. 6 - 2.2.3.7 Operators ................................ 7 - 2.2.3.8 Symbols .................................. 7 - 2.2.3.9 Constants ................................ 7 - 2.2.4 Comment Field .................................. 8 - 2.3 ASSEMBLER OUTPUT ...................................... 9 - -CHAPTER 3 - RUNNING THE ASSEMBLERS ............................... 10 - - 3.1 ASSEMBLER INVOCATION .................................. 10 - 3.2 ERROR MESSAGES ........................................ 11 - -CHAPTER 4 - ASSEMBLER DIRECTIVES ................................. 12 - - 4.1 INTRODUCTION .......................................... 12 - 4.2 BSZ - BLOCK STORAGE OF ZEROS .......................... 12 - 4.3 EQU - EQUATE SYMBOL TO A VALUE ........................ 13 - 4.4 FCB - FORM CONSTANT BYTE .............................. 13 - 4.5 FCC - FORM CONSTANT CHARACTER STRING .................. 13 - 4.6 FDB - FROM DOUBLE BYTE CONSTANT ....................... 13 - 4.7 FILL - FILL MEMORY .................................... 14 - 4.8 OPT - ASSEMBLER OUTPUT OPTIONS ........................ 14 - 4.9 ORG - SET PROGRAM COUNTER TO ORIGIN ................... 14 - 4.10 PAGE - TOP OF PAGE ................................... 15 - 4.11 RMB - RESERVE MEMORY BYTES ........................... 15 - 4.12 ZMB - ZERO MEMORY BYTES .............................. 15 - -APPENDIX A - CHARACTER SET ....................................... 16 - -APPENDIX B - ADDRESSING MODES .................................... 18 - - B.1 M6800/M6801 ADDRESSING MODES .......................... 18 - B.2 M6804/68HC04 ADDRESSING MODES ......................... 19 - B.3 M6805/68HC05 ADDRESSING MODES ......................... 21 - - - - i - - - - - - - - TABLE OF CONTENTS - - B.4 M6809 ADDRESSING MODES ................................ 22 - B.5 M68HC11 ADDRESSING MODES .............................. 26 - -APPENDIX C - DIRECTIVE SUMMARY ................................... 28 - -APPENDIX D - ASSEMBLER LISTING FORMAT ............................ 29 - -APPENDIX E - S-RECORD INFORMATION ................................ 30 - - E.1 INTRODUCTION .......................................... 30 - E.2 S-RECORD CONTENT ...................................... 30 - E.3 S-RECORD TYPES ........................................ 30 - E.4 S-RECORD EXAMPLE ...................................... 31 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ii - - - - - - - - CHAPTER 1 - GENERAL INFORMATION - - -1.1 INTRODUCTION - -This is the user's reference manual for the IBM-PC hosted Motorola -Freeware 8 bit cross assemblers. It details the features and -capabilities of the cross assemblers, assembler syntax and directives, -options, and listings. It is intended as a detailed reference and an -introduction for those unfamiliar with Motorola assembler syntax and -format. Those experienced with Motorola assembler products may wish -to examine the file ASEMBLER.DOC available with the cross assemblers, -which briefly describes the differences between these assemblers and -earlier, non-pc based versions. - -Assemblers are programs that process assembly language source program -statements and translate them into executable machine language object -files. A programmer writes his source program using any text editor -or word processor that can produce an ASCII text output. With some -word processors this is known as "non document" mode. Non document -mode produces a file without the non-printable embedded control -characters that are used in document formating. (Caution: assembling -a file that has been formatted with embedded control characters may -produce assembler errors. The solution is to convert the source file -to ASCII text.) Once the source code is written, the source file is -assembled by processing the file via the assembler. - -Cross assemblers (such as the Motorola Freeware Assemblers) allow -source programs written and edited on one computer (the host) to -generate executable code for another computer (the target). The -executable object file can then be downloaded and run on the target -system. In this case the host is an IBM-PC or compatible and the -target system is based on a Motorola 8-bit microprocessor (6800, 6801, -6803, 6805, 68HC05, 6809, or 68HC11). - -The assemblers are the executable programs AS*.EXE where * is any of -0, 1, 4, 5, 9, or 11 depending on which microprocessor you are writing -code for. The details of executing the assembler programs are found -in Chapter 3. The assembly language format and syntax for the various -processors is very similar with slight variations due to varied -programming resources (instructions, addressing modes, and registers). -These variations are explained in Appendix B. - - -1.2 ASSEMBLY LANGUAGE - -The symbolic language used to code source programs to be processed by -the Assembler is called assembly language. The language is a -collection of mnemonic symbols representing: operations (i.e., machine -instruction mnemonics or directives to the assembler), symbolic names, -operators, and special symbols. The assembly language provides -mnemonic operation codes for all machine instructions in the -instruction set. The instructions are defined and explained in the -Programming Reference Manuals for the specific devices, available from -Motorola. The assembly language also contains mnemonic directives - - - - - - - - Freeware Assemblers User's Manual - - -which specify auxiliary actions to be performed by the Assembler. -These directives are not always translated into machine language. - - -1.3 OPERATING ENVIRONMENT - -These assemblers will run on any IBM-PC, XT, AT, PS-2, or true -compatible. The assemblers may be run off of a floppy disk drive or -they may be copied onto a hard drive for execution. DOS 2.0 or later -is required. - - -1.4 ASSEMBLER PROCESSING - -The Macro Assembler is a two-pass assembler. During the first pass, -the source program is read to develop the symbol table. During the -second pass, the object file is created (assembled) with reference to -the table developed in pass one. It is during the second pass that -the source program listing is also produced. - -Each source statement is processed completely before the next source -statement is read. As each statement is processed, the Assembler -examines the label, operation code, and operand fields. The operation -code table is scanned for a match with a known opcode. During the -processing of a standard operation code mnemonic, the standard -machine code is inserted into the object file. If an Assembler -directive is being processed, the proper action is taken. - -Any errors that are detected by the Assembler are displayed before the -actual line containing the error is printed. If no source listing is -being produced, error messages are still displayed to indicate that -the assembly process did not proceed normally. - - - - - - - - - - - - - - - - - - - - - - - - - - - 2 - - - - - Freeware Assemblers User's Manual - - - CHAPTER 2 - CODING ASSEMBLY LANGUAGE PROGRAMS - - -2.1 INTRODUCTION - -Programs written in assembly language consist of a sequence of source -statements. Each source statement consists of a sequence of ASCII -characters ending with a carriage return. Appendix A contains a list -of the supported character set. - - -2.2 SOURCE STATEMENT FORMAT - -Each source statement may include up to four fields: a label (or "*" -for a comment line), an operation (instruction mneumonic or assembler -directive), an operand, and a comment. - - -2.2.1 Label Field - -The label field occurs as the first field of a source statement. The -label field can take one of the following forms: - -1. An asterisk (*) as the first character in the label field indicates -that the rest of the source statement is a comment. Comments are -ignored by the Assembler, and are printed on the source listing only -for the programmer's information. - -2. A whitespace character (blank or tab) as the first character -indicates that the label field is empty. The line has no label and is -not a comment. - -3. A symbol character as the first character indicates that the line -has a label. Symbol characters are the upper or lower case letters a- -z, digits 0-9, and the special characters, period (.), dollar sign -($), and underscore (_). Symbols consist of one to 15 characters, the -first of which must be alphabetic or the special characters period (.) -or underscore (_). All characters are significant and upper and lower -case letters are distinct. - -A symbol may occur only once in the label field. If a symbol does -occur more than once in a label field, then each reference to that -symbol will be flagged with an error. - -With the exception of some directives, a label is assigned the value -of the program counter of the first byte of the instruction or data -being assembled. The value assigned to the label is absolute. -Labels may optionally be ended with a colon (:). If the colon is -used it is not part of the label but merely acts to set the label off -from the rest of the source line. Thus the following code fragments -are equivalent: - - here: deca - bne here - - - - 3 - - - - - Freeware Assemblers User's Manual - - - here deca - bne here - -A label may appear on a line by itself. The assembler interprets this -as set the value of the label equal to the current value of the -program counter. - -The symbol table has room for at least 2000 symbols of length 8 -characters or less. Additional characters up to 15 are permissible at -the expense of decreasing the maximum number of symbols possible in -the table. - - -2.2.2 Operation Field - -The operation field occurs after the label field, and must be preceded -by at least one whitespace character. The operation field must contain -a legal opcode mneumonic or an assembler directive. Upper case -characters in this field are converted to lower case before being -checked as a legal mneumonic. Thus 'nop', 'NOP', and 'NoP' are -recognized as the same mneumonic. Entries in the operation field may -be one of two types: - -Opcode. These correspond directly to the machine instructions. The -operation code includes any register name associated with the -instruction. These register names must not be separated from the -opcode with any whitespace characters. Thus 'clra' means clear -accumulator A, but 'clr a' means clear memory location identified by -the label 'a'. - -Directive. These are special operation codes known to the Assembler -which control the assembly process rather than being translated into -machine instructions. - - -2.2.3 Operand Field - -The operand field's interpretation is dependent on the contents of the -operation field. The operand field, if required, must follow the -operation field, and must be preceded by at least one whitespace -character. The operand field may contain a symbol, an expression, or a -combination of symbols and expressions separated by commas. - -The operand field of machine instructions is used to specify the -addressing mode of the instruction, as well as the operand of the -instruction. The following tables summarize the operand field -formats for the various processor families. (NOTE: in these tables -parenthesis "()" signify optional elements and angle brackets "<>" -denote an expression is inserted. These syntax elements are present -only for clarification of the format and are not inserted as part of -the actual source program. All other characters are significant and -must be used when required.) - - - - - - - 4 - - - - - Freeware Assemblers User's Manual - - -2.2.3.1 M6800/6801 Operand Syntax - -The format of the operand field for M6800/6801 instructions is: - - Operand Format M6800/M6801 Addressing Mode - -------------- --------------------------- - no operand accumulator and inherent - direct, extended, or relative - # immediate - ,X indexed - -Details of the M6800/6801 addressing modes may be found in Appendix B. - - -2.2.3.2 M6804/68HC Operand Syntax - -For the M6804/68HC04, the following operand formats exist: - - Operand Format M6804/68HC04 Addressing Mode - -------------- ---------------------------- - no operand accumulator and inherent - direct, extended, or relative - # immediate - bit set or clear - , bit test and branch - [ or ] register indirect - ,# move indirect - -Details of the M6804/68HC04 addressing modes may be found in Appendix -B. - - -2.2.3.3 M6805/M68HC05 Operand Syntax - -For the M6805/68HC05, the operand formats are: - - Operand Format M6805/68HC05 Addressing Mode - -------------- ---------------------------- - no operand accumulator and inherent - direct, extended, or relative - # immediate - ,X indexed - , bit set or clear - ,, bit test and branch - -Details of the M6805/68HC05 addressing modes may be found in Appendix -B. - - -2.2.3.4 M6809 Operand Syntax - -For the M6809, the following operand formats are used: - - - - - - - 5 - - - - - Freeware Assemblers User's Manual - - - Operand Format M6809 Addressing Mode - -------------- --------------------- - no operand accumulator and inherent - direct, extended, or relative - # immediate - ,X indexed - < forced direct - > forced extended - ] extended indirect - ,R indexed - <,R forced 8-bit offset indexed - >,R forced 16-bit offset indexed - [,R] indexed indirect - <[,R] forced 8-bit offset indexed indirect - >[,R] forced 16-bit offset indexed indirect - Q+ auto increment by 1 - Q++ auto increment by 2 - [Q++] auto increment indirect - -Q auto decrement by - --Q auto decrement by 2 - [--Q] auto decrement indirect - W1,[W2,...,Wn] immediate - -where R is one of the registers PCR, S, U, X, or Y, and Q is one of -the registers S, U, X, or Y. Wi (i=1 to n) is one of the symbols A, -B, CC, D, DP, PC, S, U, X, or Y. - -Details of the M6809 addressing modes may be found in Appendix B. - - -2.2.3.5 M68HC11 Operand Syntax - -For the M68HC11, the following operand formats exist: - - Operand Format M68HC11 Addressing Mode - -------------- ----------------------- - no operand accumulator and inherent - direct, extended, or relative - # immediate - ,X indexed with X register - ,Y indexed with Y register - bit set or clear - bit test and branch - -The bit manipulation instruction operands are separated by spaces in -this case since the HC11 allows bit manipulation instructions on -indexed addresses. Thus a ',X' or ',Y' may be added to the final two -formats above to form the indexed effective address calculation. - -Details of the M68HC11 addressing modes may be found in Appendix B. -The operand fields of assembler directives are described in Chapter 4. - - -2.2.3.6 Expressions. An expression is a combination of symbols, -constants, algebraic operators, and parentheses. The expression is -used to specify a value which is to be used as an operand. - - - 6 - - - - - Freeware Assemblers User's Manual - - -Expressions may consist of symbols, constants, or the character '*' -(denoting the current value of the program counter) joined together by -one of the operators: + - * / % & | ^ . - - -2.2.3.7 Operators. The operators are the same as in c: - - + add - - subtract - * multiply - / divide - % remainder after division - & bitwise and - | bitwise or - ^ bitwise exclusive or - -Expressions are evaluated left to right and there is no provision for -parenthesized expressions. Arithmetic is carried out in signed two- -complement integer precision (that's 16 bits on the IBM PC). - - -2.2.3.8 Symbols. Each symbol is associated with a 16-bit integer -value which is used in place of the symbol during the expression -evaluation. The asterisk (*) used in an expression as a symbol -represents the current value of the location counter (the first byte -of a multi-byte instruction). - - -2.2.3.9 Constants. Constants represent quantities of data that do -not vary in value during the execution of a program. Constants may be -presented to the assembler in one of five formats: decimal, -hexadecimal, binary, or octal, or ASCII. The programmer indicates the -number format to the assembler with the following prefixes: - - $ HEX - % BINARY - @ OCTAL - ' ASCII - -Unprefixed constants are interpreted as decimal. The assembler -converts all constants to binary machine code and are displayed in the -assembly listing as hex. - -A decimal constant consists of a string of numeric digits. The value -of a decimal constant must fall in the range 0-65535, inclusive. The -following example shows both valid and invalid decimal constants: - - VALID INVALID REASON INVALID - ----- ------- -------------- - 12 123456 more than 5 digits - 12345 12.3 invalid character - -A hexadecimal constant consists of a maximum of four characters from -the set of digits (0-9) and the upper case alphabetic letters (A-F), -and is preceded by a dollar sign ($). Hexadecimal constants must be - - - - 7 - - - - - Freeware Assemblers User's Manual - - -in the range $0000 to $FFFF. The following example shows both valid -and invalid hexadecimal constants: - - VALID INVALID REASON INVALID - ----- ------- -------------- - $12 ABCD no preceding "$" - $ABCD $G2A invalid character - $001F $2F018 too many digits - -A binary constant consists of a maximum of 16 ones or zeros preceded -by a percent sign (%). The following example shows both valid and -invalid binary constants: - - VALID INVALID REASON INVALID - ----- ------- -------------- - %00101 1010101 missing percent - %1 %10011000101010111 too many digits - %10100 %210101 invalid digit - -An octal constant consists of a maximum of six numeric digits, -excluding the digits 8 and 9, preceded by a commercial at-sign (@). -Octal constants must be in the ranges @0 to @177777. The following -example shows both valid and invalid octal constan -ts: - - VALID INVALID REASON INVALID - ----- ------- -------------- - @17634 @2317234 too many digits - @377 @277272 out of range - @177600 @23914 invalid character - -A single ASCII character can be used as a constant in expressions. -ASCII constants are preceded by a single quote ('). Any character, -including the single quote, can be used as a character constant. The -following example shows both valid and inval -id character constants: - - VALID INVALID REASON INVALID - ----- ------- -------------- - '* 'VALID too long - -For the invalid case above the assembler will not indicate an error. -Rather it will assemble the first character and ignore the remainder. - - -2.2.4 Comment Field - -The last field of an Assembler source statement is the comment field. -This field is optional and is only printed on the source listing for -documentation purposes. The comment field is separated from the -operand field (or from the operation field if no operand is required) -by at least one whitespace character. The comment field can contain -any printable ASCII characters. - - - - - - 8 - - - - - Freeware Assemblers User's Manual - - -2.3 ASSEMBLER OUTPUT - -The Assembler output includes an optional listing of the source -program and an object file which is in the Motorola S Record format. -Details of the S Record format may be found in Appendix E. The -Assembler will normally suppress the printing of the source listing. -This condition, as well as others, can be overridden via options -supplied on the command line that invoked the Assembler. - -Each line of the listing contains a reference line number, the address -and bytes assembled, and the original source input line. If an input -line causes more than 6 bytes to be output (e.g. a long FCC -directive), additional bytes (up to 64) are listed on succeeding lines -with no address preceding them. - -The assembly listing may optionally contain a symbol table or a cross -reference table of all symbols appearing in the program. These are -always printed at the end of the assembly listing if either the symbol -table or cross reference table options (Paragraph 4.8) are in effect. -The symbol table contains the name of each symbol, along with its -defined value. The cross reference table additionally contains the -assembler-maintained source line number of every reference to every -symbol. The format of the cross reference table is shown in Appendix -D. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 9 - - - - - Freeware Assemblers User's Manual - - - CHAPTER 3 - RUNNING THE ASSEMBLERS - - -3.1 ASSEMBLER INVOCATION - -The Motorola Freeware Assembly programs are named as*.exe where '*' is -any of 0, 1, 4, 5, 9, or 11 depending on which processor family you -wish to assemble code for. For example, to generate M6800 code run -the as0.exe program. To generate M68HC05 code run the as5.exe -program, and so forth. To run the assembler enter the following -command line: - - as* file1 (file2 . . . ) ( - option1 option2 . . . ) - -where file1, file2, etc are the names of the source files you wish to -assemble. The source filenames may have extensions but the assembler -does not check for any particular extension ( however, do not use the -.S19 extension since that is the extension of the object file created -by the assembler. Its creation would overwrite the source file when -it is written to the disk). - -The options are one or more of the following: - - l enables output listing - no disables output listing (default). - cre enables the cross reference table generation - s enables the symbol table generation - c enables cycle counting - noc disables cycle counting - -The minus sign preceding the option should be separated from the last -file name by a space. These options may also be indicated to the -assembler by the use of the OPT directive in the source file. The OPT -directive is described in Paragraph 4.8. - -The object file created is written to disk and given the name -'FILENAME.S19' where 'FILENAME' is the name of the first source file -specified on the command line. Any errors and the optional listing -(if specified) are displayed on the screen. The listing and/or error -messages may be saved to a file for later examination or printing by -append an i/o redirection command to the command line. On the PC i/o -redirection is indicated with the greater-than ('>') symbol followed -by any new or existing file name. - -Command line examples: - -The command line - - as5 myfile - -would run the M6805/68HC05 assembler on the source file 'myfile'. The -object file would be written to 'myfile.s19' and any errors would -appear on the screen. - - - - - 10 - - - - - Freeware Assemblers User's Manual - - -The command line - - as9 test.asm nexttest.s -l - -would run the M6809 assembler on the source files 'test.asm' and -'nexttest.s'. The object file would be written to 'test.s19' and any -errors and the assembly listing would appear on the screen. - -The command line - - as9 test.asm nexttest.s -l cre s >test.lst - -would run the M6809 assembler on the source files 'test.asm' and -'nexttest.s'. The object file would be written to 'test.s19'. A -listing would be created followed by a symbol table and cross -reference which would all be written to the file test.lst -. - -3.2 ERROR MESSAGES - -Error diagnostic messages are placed in the listing file just before -the line containing the error. The format of the error line is: - - Line_number: Description of error - - or - - Line_number: Warning ---- Description of error - -Errors in pass one cause cancellation of pass two. Warning do not -cause cancellation of pass two but are indications of a possible -problem. Error messages are meant to be self-explanatory. - -If more than one file is being assembled, the file name precedes the -error: - - File_name,Line_number: Description of error - -Some errors are classed as fatal and cause an immediate termination of -the assembly. Generally this happens when a temporary file cannot be -created or is lost during assembly. - - - - - - - - - - - - - - - - - - 11 - - - - - Freeware Assemblers User's Manual - - - CHAPTER 4 - ASSEMBLER DIRECTIVES - - -4.1 INTRODUCTION - -The Assembler directives are instructions to the Assembler, rather -than instructions to be directly translated into object code. This -chapter describes the directives that are recognized by the Freeware -Assemblers. Detailed descriptions of each directive are arranged -alphabetically. The notations used in this chapter are: - - ( ) Parentheses denote an optional element. - - XYZ The names of the directives are printed in capital letters. - - < > The element names are printed in lower case and contained in -angle brackets. All elements outside of the angle brackets '<>' must -be specified as-is. For example, the syntactical element (,) -requires the comma to be specified if the optional element is -selected. The following elements are used in the subsequent -descriptions: - - - A statement's comment field -
trunk/sw/epedit.exe Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/sw/as9.exe =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/sw/as9.exe =================================================================== --- trunk/sw/as9.exe (revision 2) +++ trunk/sw/as9.exe (nonexistent)
trunk/sw/as9.exe Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.