0 : =$100 MIVEC EQU $100 0 : =$104 NMIVEC EQU $104 0 : =$F002 STRAPS EQU $F002 0 : =$0 NOTERM EQU 0 0 : =$F000 ACIACS EQU $F000 0 : =$F001 ACIADA EQU $F001 0 : ;** 0 : ;**MONITOR STACK AND FLAGS 0 : ;** F1 : ORG $F1 F1 : STACK RMB 1 ;BOTTOM OF MONITOR'S STACK F2 : BRKADR RMB 1 ;BREAKPOINT ADDRESS FLAG F3 : ECHO RMB 1 ;TTY ECHO FLAG F4 : EXTFLG RMB 1 ;ENTENDED CHARACTER FLAG F5 : BUFULL RMB 1 ;BUFFER FULL FLAG F6 : SAVSTK RMB 2 ;TEMP FOR STACK POINTER F8 : TEMP RMB 1 ;TEMPORARY STORAGE F9 : BYTECT RMB 1 ;BYTE COUNT FA : XHI RMB 1 ;XREG HIGH FB : XLOW RMB 1 ;XREG LOW FC : SHIFT RMB 1 ;BAUDOT SHIFT FLAG FD : SAVEX RMB 2 ;TEMP FOR INDEX RG FF : BUFFER RMB 1 ;BAUDOT CHARACTER FLAG 100 : ;** 100 : ;* START OF PROM 100 : ;** FF00 : ORG $FF00 FF00 : ;** FF00 : ;* INPUT ONE CHAR INTO A-REGISTER FF00 : ;* ECHO CHARACTER IF BIT 7 OF ECHO FLAG IS CLEAR FF00 : ;** FF00 : 8D 22 INCH BSR POLCAT ;ACIA STATUC TO A REG FF02 : 24 FC BCC INCH ;RECEIVE NOT READY FF04 : C6 7F LDA B, #$7F ;MASK FOR PARITY REMOVAL FF06 : D1 F3 CMP B, ECHO ;CHECK ECHO FLAG FF08 : F4 F0 01 AND B, ACIADA ;GET CARACTER FF0B : 24 74 BCC OUTCH ;ECHO FF0D : 39 RTS ;NO ECHO FF0E : ;** FF0E : ;* THE FOLLOWING NOP LINES LINES UP THE ENTRY FF0E : ;* POINTS TO POLCAT IN THE TWO VERSIONS FF0E : ;* OF THE MONITOR FF0E : ;** FF0E : 01 NOP FF0F : ;** FF0F : ;* INPUT ONE HEX DIGIT INTO B REG FF0F : ;* RETURN TO CALLING PROGRAM IF FF0F : ;* CHARACTER RECEIVED IS A HEX FF0F : ;* DIGIT. IF NOT HEX, GO TO CRLF FF0F : ;** FF0F : 8D EF INHEX BSR INCH ;GET A CHARACTER FF11 : C0 30 SUB B, #'0' FF13 : 2B 3C BMI C1 ;NOT HEX FF15 : C1 09 CMP B, #$09 FF17 : 2F 0A BLE IN1HG ;NOT HEX FF19 : C1 11 CMP B, #$11 FF1B : 2B 34 BMI C1 ;NOT HEX FF1D : C1 16 CMP B, #$16 FF1F : 2E 30 BGT C1 ;NOT HEX FF21 : C0 07 SUB B, #$07 ;IT'S A LETTER-GET BCD FF23 : 39 IN1HG RTS ;RETURN FF24 : ;** FF24 : ;* POLE FOR CHARACTER FF24 : ;* SETS CARRY IF CHARACTER IS IN BUFFER FF24 : ;* CLOBBERS 8 REG FF24 : ;** FF24 : F6 F0 00 POLCAT LDA B, ACIACS ;ACIA STATUS T0 B FF27 : 57 ASRB ;ROTATE RDRF BIT INTO CARRY FF28 : 39 RTS ;RETURN FF29 : ;** FF29 : ;* LOAD PAPER TAPE FF29 : ;* LOAD ONLY S1 TYPE RECORDS FF29 : ;* TERMINATE ON S9 OR CHECKSUM ERROR FF29 : ;** FF29 : 8D D5 LOAD BSR INCH ;READ FRAME FF2B : C0 53 SUB B, #'S' FF2D : 26 FA BNE LOAD ;FIRST CHAR NOT (S) FF2F : 8D CF BSR INCH ;READ FRAME FF31 : C1 39 CMP B, #'9' FF33 : 27 1C BEQ C1 ;S9 END OF FILE FF35 : C1 31 CMP B, #'1' FF37 : 26 F0 BNE LOAD ;SECOND CHAR NOT (1) FF39 : 4F CLR A ;ZERO THE CHECKSUM FF3A : 8D 17 BSR BYTE ;READ BYTE FF3C : C0 02 SUB B, #$02 FF3E : D7 F9 STA B, BYTECT ;BYTE COUNT FF40 : 8D 20 BSR BADDR ;GET ADDRESS OF BLOCK FF42 : 8D 0F LOAD11 BSR BYTE ;GET DATA BYTE FF44 : 7A 00 F9 DEC BYTECT ;DECREMENT BYTE COUNT FF47 : 27 05 BEQ LOAD15 ;DONE WITH THIS BLOCK FF49 : E7 00 STA B, 0, X ;STORE DATA FF4B : 08 INX ;BUMP POINTER FF4C : 20 F4 BRA LOAD11 ;GO BACK FOR MORE FF4E : 4C LOAD15 INC A ;INCREMENT CHECKSUM FF4F : 27 D8 LLOAD BEQ LOAD ;ALL OK - IT'S ZERO FF51 : 20 58 C1 BRA CRLF ;CHECKSUM ERROR - QUIT FF53 : ;** FF53 : ;* READ BYTE (2 HEX DIGITS) FF53 : ;* INTO B REG FF53 : ;* A IS USED FOR PAPER TAPE CHECKSUM FF53 : ;** FF53 : 8D BA BYTE BSR INHEX ;GET FIRST HEX DIG FF55 : 58 ASL B ;GET SHIFT TO HIGH ORDER 4 BITS FF56 : 58 ASL B FF57 : 58 ASL B FF58 : 58 ASL B FF59 : 1B ABA ;ADD TO CHEKSUM FF5A : D7 F8 STA B, TEMP ;STORE DIGIT FF5C : 8D B1 BSR INHEX ;GET 2ND HEX DIG FF5E : 1B ABA ;ADD TO CHECKSUM FF5F : DB F8 ADD B, TEMP ;COMBINE DIGITS TO GET BYTE FF61 : 39 RTS ;RETURN FF62 : ;** FF62 : ;* READ 16 BIT ADDRESS INTO X FF62 : ;* STORE SAME ADDRESS IN XHI & XLO FF62 : ;* CLOBBERS B REG FF62 : ;** FF62 : 8D EF BADDR BSR BYTE ;GET HIGH ORDER ADDRESS FF64 : D7 FA STA B, XHI ;STORE IT FF66 : 8D EB BSR BYTE ;GET LOW ORDER ADDRESS FF68 : D7 FB STA B, XLOW ;STORE IT FF6A : DE FA LDX XHI ;LOAD X WITH ADDRESS BUILT FF6C : 39 RTS ;RETURN FF6D : ;** FF6D : ;* PRINT BYTE IN A REG FF6D : ;* CLOBBERS B REG FF6D : ;** FF6D : 16 OUT2H TAB ;COPY BYTE TO B FF6E : 54 LSR B ;SHIFT TO RIGHT FF6F : 54 LSR B FF70 : 54 LSR B FF71 : 54 LSR B FF72 : 8D 01 BSR OUTHR ;OUTPUT FIRST DIGIT FF74 : 16 TAB ;BYTE INTO B AGAIN FF75 : C4 0F OUTHR AND B, #$0F ;GET RID OF LEFT DIG FF77 : CB 30 ADD B, #$30 ;GET ASCII FF79 : C1 39 CMP B, #$39 FF7B : 23 04 BLS OUTCH FF7D : CB 07 ADD B, #$07 ;IF IT'S A LETTER ADD 7 FF7F : 01 NOP ;LINE UP OUTCH ENTRY POINTS FF80 : 01 NOP FF81 : 8C OUTCH FCB $8C ;USE CPX SKIP TRICK FF82 : C6 20 OUTS LDA B, #$20 ;OUTS PRINTS A SPACE FF84 : ;** FF84 : ;* OUTCH OUTPUTS CHARACTER IN B FF84 : ;** FF84 : 37 PSH B ;SAVE CHAR FF85 : 8D 9D OUTC1 BSR POLCAT ;ACIA STATUS TO B REG FF87 : 57 ASR B FF88 : 24 FB BCC OUTC1 ;XMIT NOT READY FF8A : 33 PUL B ;CHAR BACK TO B REG FF8B : F7 F0 01 STA B, ACIADA ;OUTPUT CHARACTER FF8E : 39 RTS FF8F : ;** FF8F : ;* EXAMINE AND DEPOSIT NEXT FF8F : ;* USES CONTENTS OF XHI & XLO AS POINTER FF8F : ;** FF8F : DE FA NCHANG LDX XHI ;INCREMENT POINTER FF91 : 08 INX FF92 : DF FA STX XHI FF94 : 96 FA LDA A, XHI FF96 : 8D D5 BSR OUT2H ;PRINT OUT ADDRESS FF98 : 96 FB LDA A, XLOW FF9A : 8D D1 BSR OUT2H FF9C : 8C FCB $8C ;USE CPX SKIP TRICK FF9D : ;** FF9D : ;* EXAMINE & DEPOSIT FF9D : ;** FF9D : 8D C3 CHANGE BSR BADDR ;BUILD ADDRESS FF9F : 8D E1 BSR OUTS ;PRINT SPACE FFA1 : A6 00 LDA A, 0, X ;BYTE INTO A FFA3 : 8D C8 BSR OUT2H ;PRINT BYTE FFA5 : 8D DB BSR OUTS ;PRINT SPACE FFA7 : 8D AA BSR BYTE ;GET NEW BYTE FFA9 : E7 00 STA B, 0, X ;STORE NEW BYTE FFAB : ;** FFAB : ;* COMMAND DECODING SECTION FFAB : ;** FFAB : 9E F6 CRLF LDS SAVSTK FFAD : C6 0D LDA B, #$0D ;CARRIAGE RETURN FFAF : 8D D0 BSR OUTCH FFB1 : C6 0A LDA B, #$0A ;LINE FEED FFB3 : 8D CC BSR OUTCH FFB5 : C6 2E LDA B, #'.' ;PROMPT CHARACTER FFB7 : 8D C8 BSR OUTCH FFB9 : BD FF 00 JSR INCH ;READ CHARACTER FFBC : 17 TBA ;MAKE A COPY FFBD : 8D C3 BSR OUTS ;PRINT SPACE FFBF : 81 4C CMP A, #'L' FFC1 : 27 8C BEQ LLOAD ;LOAD PAPER TAPE FFC3 : 81 4A CMP A, #'J' FFC5 : 26 04 BNE NOTJ FFC7 : 8D 99 BSR BADDR ;GET ADDRESS TO JUMP TO FFC9 : 6E 00 JMP 0, X ;JUMP TO IT FFCB : 81 4D NOTJ CMP A, #'M' FFCD : 27 CE BEQ CHANGE ;EXAMINE & DEPOSIT FFCF : 81 4E CMP A, #'N' FFD1 : 27 BC BEQ NCHANG ;E & D NEXT FFD3 : 81 50 CMP A, #'P' FFD5 : 26 D4 BNE CRLF FFD7 : 3B RTI ;PROCEDE FROM BREAKPOINT FFD8 : ;** FFD8 : ;* RESET ENTRY POINT FFD8 : ;** FFD8 : 8E 00 F3 RESET LDS #ECHO ;INITIALIZE STACK POINTER FFDB : C6 03 LDA B, #$03 ;INIT ECHO AND BRKADR FLAGS FFDD : 37 PSH B FFDE : 37 PSH B FFDF : F7 F0 00 STA B, ACIACS ;MASTER RESET ACIA FFE2 : F6 F0 02 LDA B, STRAPS ;LOOK AT STRAPS FFE5 : 2B 19 BMI NOTERM ;NO TERM - JUMP TO 0 FFE7 : C4 04 AND B, #$04 ;GET # OF STOP BITS FFE9 : CA D1 ORA B, #$D1 FFEB : F7 F0 00 STA B, ACIACS ;INIT ACIA PORT FFEE : ;** FFEE : ;* SOFTWARE INTERRUPT ENTRY POINT FFEE : ;** FFEE : 9F F6 INTRPT STS SAVSTK ;SAVE STACK POINTER FFF0 : 9F FA STS XHI ;SAVE SP FOR N COMMAND FFF2 : D6 F2 LDA B, BRKADR ;IF BIT 7 OF BRKADR IS SET FFF4 : 2B 0A BMI NOTERM ;JUMP TO 0 FFF6 : 20 B3 BRA CRLF ;GOTO COMMAND DECODER FFF8 : ;** FFF8 : ;* NOW COME THE INTERRUPT VECTORS FFF8 : ;** FFF8 : ORG $FFF8 FFF8 : 01 00 FDB MIVEC ;MI VECTOR FFFA : FF EE FDB INTRPT ;SWI VECTOR FFFC : 01 04 FDB NMIVEC ;NMI VECTOR FFFE : FF D8 FDB RESET ;RESET VECTOR 10000 : 10000 : END symbol table (* = unused): ------------------------ ACIACS : F000 - | ACIADA : F001 - | *ARCHITECTURE : i386-unknown-win32 - | BADDR : FF62 C | *BIGENDIAN : 0 - | *BRANCHEXT : 0 - | BRKADR : F2 C | *BUFFER : FF C | *BUFULL : F5 C | BYTE : FF53 C | BYTECT : F9 C | C1 : FF51 C | *CASESENSITIVE : 0 - | CHANGE : FF9D C | *CONSTPI : 3.141592653589793 - | CRLF : FFAB C | *DATE : 1/29/2008 - | ECHO : F3 C | *EXTFLG : F4 C | *FALSE : 0 - | *FULLPMMU : 1 - | *HAS64 : 1 - | *HASDSP : 0 - | *HASFPU : 0 - | *HASPMMU : 0 - | IN1HG : FF23 C | INCH : FF00 C | *INEXTMODE : 0 - | INHEX : FF0F C | *INLWORDMODE : 0 - | *INMAXMODE : 0 - | *INSRCMODE : 0 - | *INSUPMODE : 0 - | INTRPT : FFEE C | *LISTON : 1 - | LLOAD : FF4F C | LOAD : FF29 C | LOAD11 : FF42 C | LOAD15 : FF4E C | *MACEXP : 1 - | MIVEC : 100 - | *MOMCPU : 6800 - | *MOMCPUNAME : 6800 - | NCHANG : FF8F C | *NESTMAX : 100 - | NMIVEC : 104 - | NOTERM : 0 - | NOTJ : FFCB C | OUT2H : FF6D C | OUTC1 : FF85 C | OUTCH : FF81 C | OUTHR : FF75 C | OUTS : FF82 C | *PACKING : 0 - | *PADDING : 0 - | POLCAT : FF24 C | *RELAXED : 1 - | RESET : FFD8 C | *SAVEX : FD C | SAVSTK : F6 C | *SHIFT : FC C | *STACK : F1 C | STRAPS : F002 - | TEMP : F8 C | *TIME : 23:17:26 - | *TRUE : 1 - | *VERSION : 142F - | XHI : FA C | XLOW : FB C | 69 symbols 34 unused symbols AS V1.42 Beta [Bld 55] - source file flash_mon.asm - page 7 - 1/29/2008 23:17:26 codepages: ---------- STANDARD (0 changed characters) 0.03 seconds assembly time 242 lines source file 2 passes 0 errors 0 warnings