1
0
mirror of https://github.com/livingcomputermuseum/cpus-pdp8.git synced 2026-01-12 00:12:44 +00:00

Bugfixes, getting closer.

This commit is contained in:
Josh Dersch 2019-11-12 17:01:09 -08:00
parent f963522e53
commit 8d867d46be
2 changed files with 94 additions and 61 deletions

View File

@ -41,7 +41,7 @@ F1BUF=177 /SI DDB EMPTY BLOCK POINTER
DTJOB=20 /JOB OWNING THE DECTAPE CONTROLLER
RKJOB=54 /JOB OWNING RK05 CONTROLLER
DTSI=1175 /SI TERMINATE A DECTAPE ON TIMER
DATA1=2200+DCSIZE
DATA1=3000+DCSIZE
DEVTBL=DATA1+140
DEVTBE=DEVTBL+NULINE+NULINE+2
JOBTBL=DEVTBE+22

View File

@ -5362,7 +5362,6 @@ DSTRYA, 0
DCA I DSWATA
CLA CMA
TAD DSPARM
DCA DSPAR
CDI 10 /CHANGE TO DF/IF 1
JMS RKGO0 /GO OFF TO FIELD 1 WHERE WE HAVE SPACE, SO MUCH SPACE.
JMP I DSTRYA
@ -5377,16 +5376,23 @@ DSERRX, TAD DSGO0 /POSSIBLY AN EAE JOB TO GO TO SLEEP
DISMIS
/ RETURN HERE AFTER INTERRUPT SERVICING.
/ TODO: HANDLE THIS AS W/SWAP CODE: MOVE TO NEXT SECTOR, REPEAT, ETC.
DSRET, JMP DSERR1 /ERROR
IFNZRO RKSYS <
/ SUCCESS: JUMP TO ROUTINE IN FIELD 1 TO TRANSFER DATA.
/ TODO: NEED TO STOW AC HERE
CDI 10 /CHANGE TO DF/IF 1
JMS RKRET
/ RESTORE AC HERE
CDI 10 / CHANGE TO DF/IF 1
JMS RKRET / RETURNS TO NEXT INSTRUCTION
/ WHEN TRANSFER IS COMPLETE,
/ INSTRUCTION AFTER IF MORE SECTORS
/ ARE PENDING
JMP FOK
JMP OK / STILL MORE TO DO, DO NOT
/ WRITE DSPAR
FOK, IAC
JMP DSGBAD / FINISH THINGS UP.
>
IFZERO RKSYS <
IAC
>
DSGBAD, DATFLD
TAD I DSPAR
IFZERO RKSYS <
@ -5404,9 +5410,11 @@ C0500, 500
C0017, 17 /MASK FOR SECTOR BITS
C4400, 4400
IFZERO RKSYS <
*7750
DSWC, DSMA /FOR LOADING INTO FIELD 0 ON INITIALIZATION
DSMA, DSMA /(SINCE THE 4K TRANSFER OVERWRITES THE DATA BREAK LOCATIONS)
>
SLEEPA, SLEEP
DSERRI, 0
0 /FOR DECTAPE SERVICE
@ -6934,37 +6942,7 @@ DISPL1, LAS /WHAT WAS THAT FIELD AGAIN?
JMP DISFLD-1 /NOW GO LOOK
DEVDMB= JOBTBL-2
*DEVTBL-1
DEVDMB /DUMMY USED BY FIP RELEASE
ZBLOCK DEVTBE-DEVTBL
0 /WE ALLOW THE READER EVEN IF NOT CONFIGURED FOR ONE
/THIS ALLOWS FIELD SERVICE TO USE THEIR PMK01
IFZERO PUNCH <DEVDMB>
IFNZRO PUNCH <0>
DEVDMB
IFZERO LPT <DEVDMB>
IFNZRO LPT <0>
IFZERO CDR <DEVDMB>
IFNZRO CDR <0>
IFZERO TC01 <DEVDMB
DEVDMB
DEVDMB
DEVDMB
DEVDMB
DEVDMB
DEVDMB
DEVDMB>
IFNZRO TC01 <ZBLOCK 10>
IFNZRO RK05 <ZBLOCK RK05>
IFNZRO .-JOBTBL+1 <DEVDMB>
IFNZRO .-JOBTBL+1 <DEVDMB>
IFNZRO .-JOBTBL+1 <DEVDMB>
IFNZRO .-JOBTBL+1 <DEVDMB>
-1 /TERMINATES ASSIGNABLE DEVICE TABLE
/JOBTBL, CLKTBL, TTYTBL, PRGTBL, & DSUTBL ARE SET UP BY INIT
*6500
*2400
IFNZRO RKSYS <
RKGO0, 0
@ -6979,32 +6957,44 @@ RKGO0, 0
/ WHEN DONE, SET STATUS, CLEAR DISK REGS, ETC.
/ WHEW.
/AC HAS PTR TO DSPAR.
/GRAB PARAMETERS AND TRANSLATE, STORE LOCALLY FOR REUSE DURING INTERRUPT
/SERVICING.
TAD I DSPAR / FUNCTION
AND C0004 / MASK BIT 9 (DIFFERENTIATES DMAR FROM DMAW)
DCA A16 / STOW DSPAR IN A16 (USED BY BLTF1, WE SHOULD
/ NOT CONFLICT, FINGERS CROSSED.)
TAD I A16 / FUNCTION
AND K0004 / MASK BIT 9 (DIFFERENTIATES DMAR FROM DMAW)
DCA RKWRI / STOW COMMAND FOR NOW
TAD I DSPAR / DF32 DISC EXTENSION TRANSLATES DIRECTLY TO
TAD I A16 / DF32 DISC EXTENSION TRANSLATES DIRECTLY TO
/ TRACK # BUT IS FOR SOME REASON SHIFTED LEFT
/ TWO BITS IN THE PARAMETER WORD
CLL RTL / ALIGN WITH RK8E CYLINDER ADDRESS + SURFACE BIT
/ (BITS 0-7)
DCA RKDSKA / STOW FOR NOW
TAD I DSPAR / MEMORY FIELD (IN BITS 7-9).
TAD C6201 / MAKE INTO CDF
TAD I A16 / MEMORY FIELD (IN BITS 7-9).
CLL RAL / MOVE TO 6-8.
AND K0070
TAD K6201 / MAKE INTO CDF
DCA RKEMA
TAD I DSPAR / -WORD COUNT. STORE FOR FUTURE REFERENCE.
TAD I A16 / -WORD COUNT. STORE FOR FUTURE REFERENCE.
/ THIS WILL ALWAYS BE AT LEAST ONE WORD.
DCA RKWD
TAD I DSPAR / CORE ADDRESS
TAD I A16 / CORE ADDRESS - 1
IAC
DCA RKADDR / STORE; WE WILL BE MANUALLY TRANSFERRING
/ DATA TO/FROM THIS ADDRESS USING BLT.
TAD I DSPAR / DISK ADDRESS:
TAD I A16 / DISK ADDRESS:
/ THE ADDRESS (12 BITS) IN THE TRACK TO START
/ THE TRANSFER TO/FROM
DCA RKOFF / STORE OFFSET
TAD A16 / COPY OUR INDEX BACK TO FIELD 0 (DSPAR)
/ SO THAT THE TWO ARE IN SYNC
CDF 00
DCA I DSPARF
CDF 10
TAD RKOFF
CLL RTR
RTR
@ -7014,7 +7004,7 @@ RKGO0, 0
TAD RKDSKA
DCA RKDSKA / ADD TO DISK ADDRESS
TAD RKOFF
AND C0377 / MASK OFF OFFSET WITHIN SECTOR
AND K0377 / MASK OFF OFFSET WITHIN SECTOR
DCA RKOFF /
/ OK - REGARDLESS OF WHETHER THIS IS ULTIMATELY
@ -7028,9 +7018,11 @@ RKGO0, 0
0410 / READ W/INTERRUPT INTO FIELD 1
/ TODO: NEED TO INTEGRATE DISK ADDRESS BIT 11
/ IF WE EVER HACK LARGER FILESYSTEMS
CDF / BACK TO DATA FIELD 0
CDI / BACK TO FIELD 0
JMP I RKGO0 / DONE FOR NOW
DSPARF, DSPAR / LOCATION OF DSPAR IN FIELD 0
/ DO RK READ/WRITE TO/FROM BUFFER, DISK ADDRESS IN RKDSKA
/ CALL DORKR
/ RK8E COMMAND WORD
@ -7042,10 +7034,9 @@ DORKO, TAD I DORKR / READ COMMAND WORD
DLDC
TAD RKDSKA / SECTOR / TRACK ADDRESS
DLAG / AND GO! DO IT!
ISZ DORKR
JMS I DORKR
*7000
*2600
/ INVOKED FROM FIELD 0 AFTER INTERRUPT SERVICING.
RKRET, 0
/ SUCCESS:
@ -7054,7 +7045,7 @@ RKRET, 0
/ OTHERWISE, USE BLT TO TRANSFER DATA FROM THE READ OPERATION FIRST
CLL CLA
TAD RKWCPL
SZA
SNA
JMP DSRET0
CLA
DCA RKWCPL
@ -7063,17 +7054,23 @@ RKRET, 0
/ BLT: CALCULATE THE NUMBER OF WORDS TO TRANSFER; THIS IS AT MOST
/ 256 WORDS (ONE RK05 SECTOR), AT MINIMUM 1 WORD.
DSRET0, CLL CLA
TAD RKOFF
CMA IAC
TAD K0400 / SUBTRACT SECTOR OFFSET FROM 256 TO DETERMINE
DCA RKXWC / MAX TRANSFER COUNT.
CLL / CLEAR LINK, MAY BE SET ABOVE
TAD RKWD
TAD C0400 / ADD 256, DID WE OVERFLOW?
TAD RKXWC / ADD MAX, DID WE OVERFLOW?
SZL
JMP DSRET1
CLL CLA / NO: MORE THAN 256 WORDS LEFT, COPY ONLY 256
TAD C7400
CLL CLA / NO: MORE THAN MAX WORDS LEFT, COPY ONLY MAX
TAD RKXWC
CMA IAC
JMP DSRET2
DSRET1, CLL CLA
TAD RKWD / FEWER THAN 256 WORDS, COPY THE REMAINDER
TAD RKWD / FEWER THAN MAX WORDS, COPY THE REMAINDER
DSRET2, DCA RKBLWC
TAD RKBLWC
TAD RKBLWC
DCA RKXWC / MAKE A COPY (BLT WILL STOMP ON IT)
TAD RKBLWC
CMA IAC
@ -7089,7 +7086,7 @@ DSRET2, DCA RKBLWC
DCA RKBLSF / SOURCE FIELD
TAD RKADDR
DCA RKBLSA / SOURCE ADDR
TAD C6211
TAD K6211
DCA RKBLDF / DEST FIELD
TAD RKOFF
TAD RKBLKA
@ -7102,13 +7099,14 @@ DSRET3, CLL CLA
DCA RKBLDF / DEST FIELD
TAD RKADDR
DCA RKBLDA / DEST ADDR
TAD C6211
TAD K6211
DCA RKBLSF / SOURCE FIELD
TAD RKOFF
TAD RKBLKA
DCA RKBLSA / SOURCE ADDR
/ DO THE TRANSFER
/ TODO: BLT IS IN FIELD 0... USE BLTF?
DSBL, BLT
RKBLSF, .-. / TRANSFER SOURCE FIELD
RKBLSA, .-. / SOURCE ADDRESS
@ -7138,7 +7136,7 @@ DSRNXT, / PROCESS NEXT SECTOR IF NECESSARY
CLA
TAD RKWD
SNA
JMP DSDONE / NO: JUST RETURN.
JMP DSFIN / NO: JUST RETURN.
/ YES: MOVE TO THE NEXT SECTOR
/ TODO: IF WE WALK OFF THE END OF THE 10TH ADDRESS BIT
/ WE NEED TO OVERFLOW INTO THE 11TH BIT MANUALLY.
@ -7158,6 +7156,10 @@ DSRNXT, / PROCESS NEXT SECTOR IF NECESSARY
0410 / READ W/INTERRUPT INTO FIELD 1
/ TODO: NEED TO INTEGRATE DISK ADDRESS BIT 11
/ IF WE EVER HACK LARGER FILESYSTEMS
ISZ RKRET / RETURN +1, MORE TRANSFERS TO GO.
JMP DSDONE
DSFIN, CLA
DCLR / CLEAR RK8E ON COMPLETION.
DSDONE,
CDI 00 / RETURN TO FIELD 0
JMP I RKRET
@ -7173,8 +7175,39 @@ RKBLKA, RKBLK / POINTER TO THE MONITOR'S RK05 SECTOR BUFFER (256 WORDS)
RKWCPL, 0 / WRITE COMPLETE BIT: SET WHEN A READ-MODIFY-WRITE CYCLE
/ IS COMPLETING THE WRITE PORTION OF THE CYCLE.
RKXWC, 0 / WORDS TRANSFERRED THIS GO-AROUND
C0410, 0410
C6211, 6211
K0410, 0410
K6211, 6211
DEVDMB= JOBTBL-2
*DEVTBL-1
DEVDMB /DUMMY USED BY FIP RELEASE
ZBLOCK DEVTBE-DEVTBL
0 /WE ALLOW THE READER EVEN IF NOT CONFIGURED FOR ONE
/THIS ALLOWS FIELD SERVICE TO USE THEIR PMK01
IFZERO PUNCH <DEVDMB>
IFNZRO PUNCH <0>
DEVDMB
IFZERO LPT <DEVDMB>
IFNZRO LPT <0>
IFZERO CDR <DEVDMB>
IFNZRO CDR <0>
IFZERO TC01 <DEVDMB
DEVDMB
DEVDMB
DEVDMB
DEVDMB
DEVDMB
DEVDMB
DEVDMB>
IFNZRO TC01 <ZBLOCK 10>
IFNZRO RK05 <ZBLOCK RK05>
IFNZRO .-JOBTBL+1 <DEVDMB>
IFNZRO .-JOBTBL+1 <DEVDMB>
IFNZRO .-JOBTBL+1 <DEVDMB>
IFNZRO .-JOBTBL+1 <DEVDMB>
-1 /TERMINATES ASSIGNABLE DEVICE TABLE
/JOBTBL, CLKTBL, TTYTBL, PRGTBL, & DSUTBL ARE SET UP BY INIT
*RKBLK
ZBLOCK 400 /MONITOR'S FIXED BLOCK FOR RK05 FILESYSTEM TRANSFERS