/ SBC SASI MICROCODE FOR PANEL MEMORY / VERSION 00.02 /*************************************************************************** / DEFINITIONS PEX=6004 SPD=6276 CPD=6266 SDDN=6541 LDCA=6542 LWCW=6543 LWCR=6544 LDCN=6546 LDDT=6547 RDCN=6556 RDDT=6557 *20 DMAAD, DMA /ADD OF DMA STARTUP SUB RSTADD, RESET /ADD OF RESET SUB TXFAD, TXFER /ADD OF BLOCK TXFER SUB TRSTAD, TRSTAT /ADD OF STATUS TXFER SUB WAITAD, WAIT /ADD OF WAIT SUB INITAD, INIT /ADD OF INITIALIZE SUB POINT, 0 CDIFI, 6203 /CDIF INSTRUCTION ONESEV, 0017 /CONSTANT THR, 0003 TOFOR, 0024 TWO, 0002 SEV, 0007 SEVSEV, 0077 TABPNT, 0 TXCNT, 0 PAGE CALL, TAD AC /GET AC AT CALL TIME DCA POINT /SAVE ARG POINTER TAD DF /GET DATA FIELD AT CALL TIME TAD CDIFI /BUILD INST DCA RTRN /STUFF IT FOR RETURN TAD TEMP /GET BANK,FIELD AT CALL TIME JMS I CDBFA /INDIRECTS TO CALLER TAD I POINT /GET COMMAND DCA COMM /STUFF IT ISZ POINT /POINTER TO UNIT # TAD I POINT /GET UNIT # BSW /UNIT # TO BITS 4,5 RAR /UNIT # TO BITS 5,6 DCA UNIT /STUFF IT ISZ POINT /POINTER TO DCONTROL ISZ POINT /POINTER TO SECTHI CLA CLL TAD ONESEV AND I POINT /4 BITS OF SECTHI TO ACC RTL RTL /SECTHI BITS TO BITS 4-7 DCA SECTM /SAVE IT FOR LATER ISZ POINT /POINTER TO SECTMD TAD I POINT RTR AND ONESEV TAD SECTM /ACC=000 0HH HHM MMM DCA SECTM /STUFF IT TAD I POINT /GET SECTMD AGAIN AND THR /LS 2 BITS ONLY BSW /TO BITS 4,5 DCA SECTL /SAVE IT FOR LATER ISZ POINT /POINTER TO SECTLO TAD I POINT AND SEVSEV TAD SECTL /ACC=000 0MM LLL LLL DCA SECTL /STUFF IT ISZ POINT /POINTER TO SCTCNT TAD I POINT DCA SECCNT /STUFF SECT COUNT CLL TAD SECCNT /GET SECT COUNT BACK RTL /TIMES 4 CIA /NEGATE IT DCA DMACNT /SAVE IT FOR DMA STARTUP CALL ISZ POINT /POINTER TO TRFLD TAD I POINT /GET BANK FIELD BSW /ACC=BBB FFF 000 000 DCA DAD /SAVE FOR LATER ISZ POINT /POINTER TO TRADHI TAD I POINT AND SEVSEV TAD DAD CLL RAR /ACC=0BB BFF FAA AAA DCA DAD /FINAL DMA ADD SPD /INDIRECTS TO PANEL MEM 6203 /CDIF 0 JMS I TXFAD /CALL TO BLOCK TRANSFER SUB TABLE /ADD OF TABLE JMP REINIT /ERROR REINIT AND RETURN TO CALLER TAD COMM SPA /DMA TXFER REQUIRED? JMP WS /NO RTR /LINK=0 IF READ 1 IF WRITE CLA CML RAL /ACC=1 IF READ 0 IF WRITE DCA DMAFNC JMS I DMAAD /CALL TO DMA START SUB DMAFNC, 0 /STUFFED DAD, 0 /STUFFED DMACNT, 0 /STUFFED JMP REINIT /ERROR RET WS, JMS I TRSTAD /CALL TO TRANSFER STATUS SUB JMP REINIT /ERROR REINIT AND RETURN TO CALLER ISZ 0 /ALL DONE BUMP TO NORMAL RETURN RTRN, 0 /STUFFED WITH CDIF FOR RETURN PEX /EXIT PANEL MODE JMP I 0 /BACK TO CALLER REINIT, JMS I INITAD /CALL TO INIT SUB NOP /ERROR RETURN JMP RTRN /RETURN TO CALLER TABLE, 0006 /NUMBER OF BYTES TO TXFER COMM, 0 UNIT, 0 SECTM, 0 SECTL, 0 SECCNT, 0 0 DMA, 0 /ENTRY JMS I WAITAD /WAIT FOR DATA MODE BEFORE STARTING DMA 0000 /C/D IN DATA MODE 0004 /MASK JMP DERR /ERROR RETURN SDDN /CLEAR OUT DISK DONE IF SET NOP CLA CLL TAD I DMA /PICK UP ARG 1 0=WRITE 1=READ TAD INST /BUILD DMA INSTRUCTION DCA EXEC /STORE FOR EXECUTION ISZ DMA /BUMP POINTER TAD I DMA LDCA /SEND CURRENT ADD ISZ DMA /BUMP POINTER TAD I DMA EXEC, 0 /STUFFED WITH PROPER INST. ISZ DMA /BUMP FOR RETURN ISZ DMA /ONE MORE TIME JMP I DMA /RETURN DERR, CLA CLL CML IAC RAL /ACC=3 TAD DMA DCA DMA /POINT TO ERROR RETURN JMP I DMA /RETURN INST, 6543 /INST. TO START DMA TXFER TRSTAT, 0 /ENTRY JMS I WAITAD /CALL TO WAIT SUB 0015 /REQ,CMD,INPT,ACK* 1215 /MASK+ERROR ON DISK TIMEOUT JMP I TRSTAT /ERROR RDDT /TXFER STATUS BYTE AND TWO /ERROR BIT SZA /SKIP IF NO ERROR JMP I TRSTAT /ERROR JMS I WAITAD /CALL TO WAIT SUB 0035 /REQ,CMD,INPT,MSG,ACK* 0235 /MASK JMP I TRSTAT /ERROR RDDT /TXFER LAST BYTE ISZ TRSTAT /BUMP TO NORM RETURN JMP I TRSTAT PAGE START, JMS I INITAD /CALL TO INITIALIZE SUB JMP ODTEX /ERROR GO TO ODT EXIT CLA CLL CML IAC RAL /ACC=3 BSW /ACC=300 6046 /SEND @ TO CONSOLE 6041 JMP .-1 /WAIT FOR COMP 6031 JMP .-1 /WAIT FOR INPUT 6036 /GET UNIT # TO BOOT FROM DCA TEMP TAD TEMP 6046 /ECHO CHAR 6041 JMP .-1 /WAIT CLA CLL TAD TEMP AND SEV CIA TAD SEV SNA CLA JMP ODTEX /EXIT TO ODT IF A SEVEN WAS TYPED CLL TAD TEMP AND THR /MASK OUT LS 2 BITS BSW RAR /UNIT # TO BITS 5,6 DCA UN JMS I TXFAD /CALL TO BLOCK TRANSFER SUB CONT /ADD OF CONTROL BLOCK JMP ODTEX /ERROR GO TO ODT FIELD 7 JMS I DMAAD /CALL TO DMA START SUB 0001 /READ 0000 /ADDRESS 7770 /CNT 1 BLOCK (2 SECTORS) JMP ODTEX /ERROR JMS I TRSTAD /CALL TO TXFER STATUS SUB JMP ODTEX /ERROR GO TO ODT FIELD 7 CLA CLL 6203 /CDIF 0 PEX CAF JMP 24 /GO TO LOC 24 MAIN MEM ODTEX, CLA CLL TAD K100 JMS I CDBFA /BANK,FIELD TO HERE JMP I READA /GO TO ODT CONT, 0006 /# OF BYTES IN TABLE 0010 /READ UN, 0 /STUFFED 0 0 /SECT 0 0002 /READ 2 SECTORS 0 TXFER, 0 /ENTRY CLA CLL TAD I TXFER /PICK UP TABLE POINTER DCA TABPNT /SAVE IT ISZ TXFER /BUMP TO ERROR RETURN TAD I TABPNT /PICK UP FIRST ARG RAL /LINK=1 IF TXFER IS IN DATA MODE CLA TAD I TABPNT /GET FIRST ARG AGAIN AND SEVSEV /AND OUT # OF ARG TO TXFER CIA /NEGATE IT DCA TXCNT /SAVE IT SZL /IS TXFER IN DATA MODE? JMP TABTX /YES SO SKIP THE SELECT JMS I WAITAD /NO SO SELECT FIRST 0 /ALL CLEAR 6377 /MASK CHECK ALL BITS JMP I TXFER /ERROR RETURN CLA CLL IAC LDDT /SET BIT 0 ON DATA BUS CLA CLL IAC LDCN /SET SELECT JMS I WAITAD /CALL TO WAIT SUB 0102 /SEL,BSY 0102 /MASK JMP I TXFER /ERROR RETURN CLA CLL LDCN /RESET SELECT JMS I WAITAD /CALL TO WAIT SUB 0006 /BSY,CMD 0006 /MASK JMP I TXFER /ERROR RETURN TABTX, ISZ TABPNT /POINT TO NEXT BYTE TO TXFER JMS I WAITAD /CALL WAIT SUB 0001 /REQ,ACK* 0201 /MASK JMP I TXFER /ERROR RTN TAD I TABPNT /PICK UP NEXT BYTE LDDT /SEND IT ISZ TXCNT /LAST ONE? JMP TABTX /NO ISZ TXFER /YES BUMP TO NORM RET JMP I TXFER /RETURN RESET, 0 /ENTRY CLA CLL DCA RCNT /INIT RETRY COUNT CLA CLL CML RTL /ACC=2 LDCN /SEND RESET CLA CLL /WASTE TIME LDCN /CLEAR RESET JMS I WAITAD /CALL WAIT 0 /ALL CLEAR 6377 /MASK ALL BITS JMP RINC /ERROR ISZ RESET /BUMP TO NORM RETURN JMP I RESET /RETURN RINC, ISZ RCNT JMP RESET+3 /TRY AGAIN JMP I RESET /CANT DO IT RCNT, 0 PAGE WAIT, 0 /ENTRY CLA CLL DCA ERRCNT /SET ERROR COUNT TO 0 TAD I WAIT /PICK UP BITS TO WAIT FOR CIA /NEGATE DCA WANT ISZ WAIT /POINT TO MASK ARG TAD I WAIT DCA MASK ISZ WAIT /BUMP TO ERROR RET LOOP, RDCN /READ CONTROL WORD AND MASK /MASK OUT BITS TO LOOK AT TAD WANT /COMPARE IT SNA /IS IT OK? JMP OK /YES ISZ ERRCNT /BUMP ERROR CNT JMP LOOP CLA CLL TAD MASK RTL /MASK BIT 2 TO SIGN BIT SMA /SHOULD WE TIME OUT ON CNT? JMP I WAIT /YES ERROR RET RDCN /NO SO CHECK FOR DISK TIMEOUT RAL /DISK TIMEOUT BIT TO SIGN BIT SPA /TIME OUT? JMP I WAIT /YES ERROR RET SDDN /SKIP ON DISK DONE JMP LOOP /NO KEEP WAITING OK, ISZ WAIT /BUMP TO NORM RET JMP I WAIT /RETURN ERRCNT, 0 WANT, 0 MASK, 0 PAGE INIT, 0 /ENTRY JMS I RSTADD /RESET JMP I INIT /ERROR JMS I TXFAD /SEND FLOPPY FORMAT FLP2 /ADD OF TABLE JMP I INIT /ERROR JMS I TRSTAD /WAIT FOR COMP CLA CLL /ERROR IF NOT A FLOPPY JMS I TXFAD FLP3 JMP I INIT JMS I TRSTAD CLA CLL /ERROR IF NOT A FLOPPY / INIT DISK 0 JMS I TXFAD DP0 JMP I INIT /ERROR JMS I TXFAD DPAR01 JMP I INIT /ERROR JMS I TRSTAD /WAIT JMP I INIT /ERROR / INIT DISK 1 JMS I TXFAD DP1 JMP I INIT JMS I TXFAD DPAR01 JMP I INIT JMS I TRSTAD JMP I INIT / INIT DISK 2 JMS I TXFAD DP2 JMP I INIT JMS I TXFAD DPAR23 JMP I INIT JMS I TRSTAD JMP I INIT / INIT DISK 3 JMS I TXFAD DP3 JMP I INIT JMS I TXFAD DPAR23 JMP I INIT JMS I TRSTAD JMP I INIT ISZ INIT JMP I INIT FLP2, 6 /6 BYTES LONG CMD MODE 300 100 /UNIT 2 0 0 0 207 FLP3, 6 300 140 0 0 0 207 DP0, 6 302 0 /UNIT 0 0 0 0 0 DPAR01, 4012 3 1 0 3 1 61 200 0 37 0 DP1, 6 302 40 0 0 0 0 DP2, 6 302 100 0 0 0 0  DPAR23, 4012 2 7 117 26 315 0 13 200 0 0 DP3, 6 302 140 0 0 0 0 /********************************************************************** $