/SERIAL DISK BOOT
/ THIS CODE WILL SEND A 000 TO THE SERVER TO INDICATE BOOT.
/ THE SERVER WILL SEND THE HELPER CODE AS FOLLOWS:
/ INSERT HELPER CODE HERE CONSISTING OF THE 8 BIT VALUES.
/ THEN THE SERVER WILL SEND A 5402 (JMP I GETNUM) TO PATCH
/ THE RETURN FROM GETNUM.
/ AT THIS POINT THE BOOT 2 CODE EXPECTS TO SEE PAIRS OF 12 BIT WORDS
/ CONSISTING OF AN ADDRESS AND THE DATA TO GO AT THAT ADDRESS. THE
/ INITIAL ADDRESS WILL BE IGNORED SINCE WE STILL NEED TO PATCH IN A 3401
/ (DCA I STRADR) OVER THE DCA .
/ AT THIS POINT THE SERVER WILL SEND AN ADDRESS FOLLOWED BY THE DATA.
/ WHEN ALL WORDS HAVE BEEN SENT WE FORCE THE BOOT 2 CODE TO JUMP TO OS/8
/BY POKEING A 7605 INTO ADDRESS 0002 AND POKEING A 5402 (JMP I 2) OVER
/THE JMP POKELP AT THE END OF POKELP.
/POSSIBLE IMPROVEMENTS:
/ ADD A WORD COUNT SUCH THAT BLOCK TRANSFERS OCCUR INSTEAD OF ADDRESS
/ DATA PAIRS.
/ DO A 3 BYTE TO 2 WORD UNPACKING.
/ WITH THE ADDRESS DATA PAIR SCHEME THIS WILL SEND AROUND 1024
/ CHARACTERS. AT 9600 BAUD THIS WOULD TAKE A LITTLE OVER A SECOND TO
/ BOOT. WITH THE BLOCK TRANSFER CHANGE IT SHOULD TAKE ABOUT HALF A
/ SECOND. WITH THE BLOCK TRANSFER AND 3 BYTE TO 2 WORD MAPPING IT
/ SHOULD BOOT IN ABOUT 0.4 SECONDS. PROBABLY NOT WORTH IT FOR THE
/ ADDITIONAL BOOT COMPLEXITY.
SKSF=6401
SKRB=6406
STLS=6416
*0000
TEMP, 0 /UPPER HALF OF 12 BITS GETS STORED HERE
STRADR, 7777 /STORE ADDRESS USED INDIRECTLY
/WE START OUT HERE AND PATCH THE IOT'S FROM WHAT WE KNOW IS IN MEM
PATCH, TAD KSFCD /COPY THE SKSF INTO PLACE
DCA SKSF1
TAD KSFCD
DCA SKSF2
TAD KRBCD /NOW COPY THE SKRB INTO PLACE
DCA SKRB1
TAD KRBCD
DCA SKRB2
/WE INITIALLY FALL INTO GETNUM WHICH WILL PATCH THE DCA . WITH JMP I GETNUM
/THE FIRST TIME THROUGH.
GETNUM, NOP /ROUTINE TO FETCH A 12 BIT NUMBER FROM THE SERVER
SKSF1, HLT /WILL BECOME SKSF
JMP .-1 /WAIT FOR CHARACTER
SKRB1, HLT /WILL BECOME SKRB
RTL /LEFT SHIFT 6 BITS TO BUILD UPPER HALF
RTL
RTL
DCA TEMP /SAVE UPPER 6 BITS
SKSF2, HLT /WILL BECOME SKSF
JMP .-1 /WAIT FOR CHARACTER
SKRB2, HLT /WILL BECOME SKRB
TAD TEMP /BUILD 12 BIT WORD
JMP I GETNUM /RETURN
*.-1 /THE NEXT INS WILL BE PATCHED BY THE JMP I GETNUM ABOVE
DCA . /THIS BECOMES THE GETNUM RETURN POINT
POKELP, JMS GETNUM /GET THE 12 BIT ADDRESS
DCA STRADR /SAVE IT FOR THE POKE
JMS GETNUM /GET THE 12 BIT DATA
CDF 00 /SERVER CAN PATCH THIS TO WRITE TO DIFFERENT FIELDS
DCA I STRADR /STORE IT
*.-1 /NEXT INS GETS PATCHED BY A DCA I STRADR ON FIRST POKE
DCA . /POKE IT
CDF 00 /FORCE BACK TO FIELD 0
JMP POKELP /REPEAT UNTIL THIS GETS OVERWRITTEN WITH A JMP I STRADR
JMP PATCH /WHEN THIS OVERWRITES THE SKSF AT KSFCD BOOT 2 STARTS
*.-2 /THE JMP PATCH ABOVE WILL OVERWRITE THE SKSF AT KSDCD
/THE FOLLOWING IS THE PORTION THAT GETS TOGGLED IN CALLED BOOT 1
GO, STLS /SEND A ZERO TO WAKE UP THE SERVER FOR BOOTING
KSFCD, SKSF /SKIP IF SERVER HAS SENT US A CHARACTER
JMP .-1 /WAIT FOR A CHARACTER
KRBCD, SKRB /READ THE CHARACTER
RTR /MOVE BITS INTO POSITION
RAR
DCA 0 /STORE ADDRESS
ISZ .-1 /BUMP STORE ADDRESS
JMP KSFCD
$