**************************** * THE MICRO WORKS * * PROM UTILITY * * U2708/C000 * * * * C. 1977 V1.0 * **************************** NAM U2708/C000 OPT NOG ORG $C000 U2708 LDS #$A042 GET STACKED LDA A #$38 A SIDE DDR STA A PIACRA LDA A #$FF TO OUTPUTS STA A PIAADR LDA A #$3C A SIDE DATA REC STA A PIACRA STA A PIACRB B SIDE DATA REC LDA A #$04 PROM TO READ STA A CW JSR DISCH ADDR & CTL WORD JMP CNTRL BURN LDA A #$30 ASCII # STA A T FOR TRY COUNTER LDX #HVON TURN ON SWITCH JSR STRING TYPE SUMTHING JSR INEEE TO CONFIRM BLOOP3 INC T NEXT TRY LDX #BHDR PRINT HDR JSR PDATA1 LDA A T PRINT TRY COUNT JSR OUTEE JSR CR LDA A #$08 WE=12V STA A CW PROM TO WRITE LDA B #$FF PIA FOR OUTPUT BSR PCTLB ALSO INITS PCNTR BLOOP2 JSR DISCH INIT ADRS BLOOP1 LDA A 0,X GET RAM DATA STA A PIADAT PUT TO PROM LDA A #$34 ZAP STA A PIACRB BSR DELAY WAIT BSR PCTL1 ZAP OFF BSR NEXT NEXT ADR BCC BLOOP1 END OF PASS? DEC B PASS=PASS-1 BNE BLOOP2 NEXT PASS BSR PCTLB PIA TO READ LDA A #$04 PROM TO READ STA A CW JSR VERIFY CHECK IT OUT TST E ANY GOOFS? BEQ JMPC NO, SPLIT TST H HARD ERRORS? BNE ERRH LDA A T CMP A #$33 THREE TRIES BNE BLOOP3 TRY HARDER ERRT LDX #TERR TOO MANY TRIES BRA ERP TOO BAD ERRH LDX #HERR HARD ERRORS ERP JSR STRING PRINT UH OH JMPC LDX #HVOFF TURN OFF ZAPPER JSR STRING TYPE ANYTHING JSR INEEE TO CONFIRM BRA CNTRL AND DIE PCTLB LDA A #$38 STUFF DDRB STA A PIACRB WITH WHATEVER'S STA B PIADAT IN ACC B PCTL1 LDA A #$3C STA A PIACRB RTS DELAY LDA A #$43 500 USEC DELAY DLOOP DEC A (FOR 1 MHZ CLOCK) BNE DLOOP RTS CHECK STA A ROMDAT SAVE TESTEE EOR A RAMDAT =TESTOR? BEQ NEXT ATTABOY AND A RAMDAT HARD ERROR STA A E H FLAG FLAG BEQ RECOV WHEW STA A H HARD ERR FLAG RECOV LDX #RAMAD PRINT ERROR JSR OUT4HS INFO FOR USERS JSR OUT2HS JSR OUT2HS LDX #CRLF FOXY TRICK TST E TO FLAG HARD BEQ OUT ERRORS W/H DEX GET IT? OUT JSR PDATA1 NO? STA A E BOO FLAG NEXT LDX RAMAD INC ADDRESS INX CLC SEE IF END CPX EA OF BUFFER BNE PUTAD SEC CARRY SET IF SO PUTAD STX RAMAD LDA A RAMAD MSB AND A #$03 ORA A CW AND CONTROL STA A PIAADR TO LATCHES LDA A #$34 STROBE 'EM STA A PIACRA LDA A #$3C WITH CA2 STA A PIACRA LDA A RAMAD+1 LSB TO PIA STA A PIAADR LDX RAMAD RTS CNTRL BSR CR CONTROL HANDLER BSR CR FEED SOME LINES LDX #IHDR WAKE UP USER BSR STRING JSR INEEE GET USER WHIM TAB BSR CR LDX #TABLE LOOK UP COMMAND CMDLP CMP B 0,X IN TABLE BEQ POUNCE INX NEXT ENTRY INX INX CPX #TABEND IS ALL? BEQ CNTRL YES BRA CMDLP NO POUNCE INX CLIMB ONTO ADDR LDX 0,X GET IT JMP 0,X AND GO TABLE FCC 'B' FDB BURN FCC 'S' FDB SET FCC 'M' FDB MOVE FCC 'X' FDB XFER FCC 'L' FDB LOAD FCC '*' FDB MIKBUG FCC 'E' FDB ERASE FCC 'V' FDB TABEND TABEND BSR VERIFY BRA CNTRL STRING JSR PDATA1 PRINT STRING CR LDX #CRLF AND CRLF JSR PDATA1 BIG DEAL LDX RAMAD RTS DISCH LDX #$0400 READ 03FF STX EA (RESTORE END) DEX JSR PUTAD TO DISCHARGE JSR DELAY 1/2 OF BUSSES LDX #$0000 THEN DO OTHER STX H (CLEAR ERRORS) JMP PUTAD HALF OF BUSSES VERIFY BSR DISCH EXERCISE FOR LDX #VHDR THE READER BSR STRING LDX #VHDR1 BSR STRING VLOOP LDA A 0,X STA A RAMDAT LDA A PIADAT JSR CHECK BCC VLOOP BRA CR ERASE BSR DISCH CHECK PROM FOR LDX #EHDR VIRGINITY BSR STRING BEFORE BURNING LDX #EHDR1 BSR STRING LDA B #$FF STA B RAMDAT ELOOP LDA A PIADAT JSR CHECK BCC ELOOP JMP CNTRL MOVE LDX #MHDR SHUFFES RANDOM JSR STRING LDX #MHDR1 BSR TWOADS BLOCKS OF STUFF INX STX EA AROUND IN RAM BSR ONEADS STX DA LDX RAMAD MLOOP LDA A 0,X LDX DA STA A 0,X INX STX DA JSR NEXT BCC MLOOP JMP CNTRL SET LDX #SHDR SET BLOCKS OF JSR STRING LDX #SHDR1 BSR TWOADS RAM TO INPUT INX STX EA VALUE JSR BYTE TAB LDX RAMAD SLOOP STA B 0,X JSR NEXT BCC SLOOP JMP CNTRL XFER JSR DISCH TRANSFERS FROM LDX #XHDR CONTENTS TO JSR STRING RAM 0000-3FFF XLOOP LDA A PIADAT STA A 0,X JSR NEXT BCC XLOOP JMP CNTRL TWOADS JSR STRING GET 2 2 BYTES ADS JSR BADDR ONE FOR RAMAD STX RAMAD JSR OUTS (PRINT A SPACE) ONEADS JSR BADDR AND ONE FOR X JMP OUTS 'NOTHER SPACE LOAD LDX #LHDR MIKBUG TAPE READER JSR STRING WITH OFFSET LDX #LHDR1 ADDR PROMPT JSR STRING JSR BADDR GET PGM START ADR STX OFFSET AND SAVE IT JSR OUTS SPACE OUT JSR INHEX GETS LENGTH AND A #$0F MASK OFF GARBAGE ASL A TIMES 4 ASL A TO CONVERT STA A LEN AND PUT AWAY JSR CR FEED A LINE * SMARTBUG PATCH GOES HERE LDA A #$3C READER ON *SB PATCH INC ECHO STA A PIASB *SB PATCH NOP NOP LDA A #$11 JSR OUTEE LOAD3 JSR INEEE READ CHARACTER CMP A #'S' TEST FOR VALID BNE LOAD3 JSR INEEE RECORD OR END CMP A #'9' OF TAPE BEQ LOAD21 END OF TAPE = S9 CMP A #'1' RECORD = S1 BNE LOAD3 CLR CKSUM INT CHECKSUM JSR BYTE GET WORD COUNT SUB A #2 STA A BYTCT JSR BADDR GET TAPE ADDR LDA B XLOW LDA A XHI SUB B OFFSET+1 SUBTRACT OFFSET SBC A OFFSET TO PUT CODE BCS OFERR IN PROM BUFFER STA B XLOW AND TEST FOR STA A XHI WRAP AROUND TO LDX XHI HIGH MEMORY LOAD11 JSR BYTE READ DATA RECORD DEC BYTCT BEQ LOAD15 'TILL END STA A 0,X STORING IT AND INX TESTING FOR STX XHI END OF BUFFER LDA A XHI TO AVOID CLOBBER DEC A (FIX A SINCE INX) CMP A LEN OF PROTECTED AREA BLT LOAD11 OFERR LDX #OERR HERE ON OFFSET BRA LOAD20 ERROR LOAD15 INC CKSUM CHECK CHECKSUM BEQ LOAD3 IF OK, NEXT RECORD LOAD19 LDX #CERR HERE ON CKSUM ERR LOAD20 JSR STRING LOAD21 LDA A #$13 RDR OFF JSR OUTEE * SMARTBUG PATCH GOES HERE ALSO LDA A #$34 *SB PATCH DEC ECHO STA A PIASB *SB PATCH NOP NOP JMP CNTRL * STRINGS, BELLS AND WHISTLES IHDR FCC 'THE MICRO WORKS' FCB $D,$A,0,0 FCC '2708 UTILITY' FCB $4 HVON FCC 'HV ON?' FCB $4 BHDR FCC 'BURNING, TRY#' FCB $4 ORG U2708+$30F HVOFF FCC 'HV OFF?' FCB $4 VHDR FCC 'VERIFY' FCB $4 VHDR1 FCC 'ADDR RA PR HS' FCB $4 EHDR FCC 'ERASURE TEST' FCB $4 EHDR1 FCC 'ADDR FF PR HS' FCB $4 MHDR FCC 'BLOCK MOVE' FCB $4 MHDR1 FCC 'SRC END DEST' FCB $4 SHDR FCC 'SET MEMORY' FCB$4 SHDR1 FCC 'FROM TO HEX' FCB $4 XHDR FCC 'TRANSFER PROM TO RAM' FCB $4 LHDR FCC 'OFFSET LOADER' FCB $4 LHDR1 FCC 'ADDR K' FCB $4 TERR FCC 'ERRORS PERSIST...' FCB $4 HERR FCC 'HARD ERRORS' FCB $4 OERR FCC 'OFFSET ERROR' FCB $4 CERR FCC 'CHECKSUM ERROR' FCB $4 CRLF1 FCC 'H' CRLF FCB $D,$A,0,0,0,$4 * RESTART VECTORS ORG U2708+$3F8 IO FDB $E000 *E28B FOR RT-68 SFE FDB $E113 *E280 POWDWN FDB $E005 *E298 START FDB $E0D0 *E147 * EQUATES AND STORAGE ORG $A050 T RMB 1 LEN RMB 1 CW RMB 1 H RMB 1 E RMB 1 RAMAD RMB 2 RAMDAT RMB 1 ROMDAT RMB 1 EA RMB 2 DA RMB 2 OFFSET RMB 2 BYTCT RMB 1 CKSUM RMB 1 XHI EQU $A00C XLOW EQU $A00D * I/O ADDRESSES PIAADR EQU $8010 I/O ADDRESSES PIACRA EQU $8011 PIADAT EQU $8012 PIACRB EQU $8013 PIASB EQU $8007 *EQUATE FOR SMARTBUG PATCH ECHO EQU $A00B * VECTORS TO MIK MOUSEBUG MIKBUG EQU $E0E3 OUT4HS EQU $E0C8 OUT2HS EQU $E0CA PDATA1 EQU $E07E BYTE EQU $E055 OUTS EQU $E0CC BADDR EQU $E047 INEEE EQU $E1AC OUTEE EQU $E1D1 INHEX EQU $E0AA THA'S ALL FOLKS... END U2708