' This is absolute loader. ' It reads a tape and store it to the memory, then send the control to the readen programm ' 8-bit tape: xx xx xx ... xx xx FF 00 ' BOOTABLE tape: xx xx xx ... xx xx FF FF 00 ' 4-bit tape: xx xx xx ... xx xx FF FF FF 00 RO1 'OBA 402_M1 'STOP READER 'HLT NXT: 'NEXT BLOCK 'OBA 602_M1 'START READER 'IBA 002_M1 'READ A BYTE - FOR CLEAR READY FLAG ' SKEEPING BLANK HEAD: 'DO LEADER: WAIT_LEADER1: 'IBA 102_M1 'READ READER STATUS ANA7 2_H2' TEST A WITH "READY TO SEND" MASK 'JAZ WAIT_LEADER1 ' IF READER IS NOT READY YET - WAIT 'IBA 002_M1 ' READ THE DATA 'WHILE A!=FF (IT IS A LEADER) INA ALA 8_D1 NAZ LEADER ' FF FF — 4-bit, FF 00 - 8-BIT else - error WAIT_LEADER2: 'IBA 102_M1 'READ READER STATUS ANA7 2_H2' TEST A WITH "READY TO SEND" MASK 'JAZ WAIT_LEADER2 ' IF READER IS NOT READY YET - WAIT IBA 002_M1 ' READ THE DATA LDB7 READ8 ' STORE 8-BIT READING ADDRES AS DEFAULT READING. IT WOULD BE CHANGED, IF IT'LL BE A REASON STB0 READADDR JAZ READ_DATA ' 8-BIT VARIANT INA ALA 8_D1 NAZ ERR ' FF FF FF - 4-BIT, else - error WAIT_LEADER3: IBA 102_M1 'READ READER STATUS ANA7 2_H2' TEST A WITH "READY TO SEND" MASK JAZ WAIT_LEADER3 ' IF READER IS NOT READY YET - WAIT IBA 002_M1 ' READ THE DATA INA ALA 8_D1 NAZ ERR ' ERROR ' FF FF FF 00 - 4-BIT, else - error WAIT_LEADER4: IBA 102_M1 'READ READER STATUS ANA7 2_H2' TEST A WITH "READY TO SEND" MASK JAZ WAIT_LEADER4 ' IF READER IS NOT READY YET - WAIT IBA 002_M1 ' READ THE DATA NAZ ERR ' ERROR LDB7 READ4 ' STORE 4-BIT READING ADDRES AS DEFAULT READING. BTW, THIS FUNCTION DOES NOT EXIST YET, SO IT POINTS TO ERROR STB0 READADDR READ_DATA: 'CRC=0, NO_CRC=0 LDA7 0_H2 STV0 NO_CRC STA0 CRC 'READING BLOCK LENGHT 'CALL READ LDB7 LNG_RET STB0 RETADDR JMP2 READADDR LNG_RET: 'LNH: HLT OCA INA STV0 LNG 'LNG=NEG(A)+1 SO LNG=-A 'READING BASE ADDRES TO X-REG 'CALL READ LDB7 BASE_RET STB0 RETADDR JMP2 READADDR BASE_RET: 'BAH: HLT STV0 PRG_ADDR2 'CALL READ LDB7 BASE2_RET STB0 RETADDR JMP2 READADDR BASE2_RET: 'BA2H: HLT STV0 PRG_ADDR1 LDX0 PRG_ADDR2 'IF (LENGHT == 0) GOTO BASE ADDR LDV0 LNG NAZ NOT_GOTO OBA 402_M1 'STOP READER JMP4 NOT_GOTO: 'ELSE READ THE BLOCK TO THE ADDRESSED AREA 'FOR (; LNG!=0; LNG++) 'DWM0 LNG2 NXT_CMD: 'CALL READ LDB7 BLOCK_RET STB0 RETADDR JMP2 READADDR BLOCK_RET: STV4 ' STORE THE READEN BYTE INX 'DH: HLT 'NEXT LNG; LDV0 LNG INA STV0 LNG ALA 8_D1 NAZ NXT_CMD 'IF (WRITTEN_CRC != CALCULATED_CRC) {STOP_READER; BEEP; HLT;} ' WRITTEN CRC -> AL 'CALL READ; NO CRC CHANGING LDB7 CRC_TST STB0 RETADDR LDA7 1_H2 STV0 NO_CRC JMP2 READADDR CRC_TST: STA0 TMP2 'A=CRC+(CRC>>8), ONLY LOW BYTE LDA0 CRC LRA 8_D1 ADA0 CRC ALA 8_D1 LRA 8_D1 SBA0 TMP2 'CRCERR: HLT JAZ CRC_CORRECT 'CALCULATED CRC (B) == READEN CRC (A) ERR: OBA 402_M1 'STOP READER LDA7 7_H2 OBA 0_H1 'RING EH: HLT CRC_CORRECT: JMP0 NXT 'READING THE NEXT BLOCK '--------------------------------------------------------------------------------- READ4: OBA 602_M1 'START READER IBA 002_M1 'READ A BYTE - FOR CLEAR READY FLAG WAIT4: IBA 102_M1 'READ READER STATUS ANA7 2_H2 ' TEST A WITH "READY TO SEND" MASK JAZ WAIT4 ' IF READER IS NOT READY YET - WAIT IBA 002_M1 ' READ THE DATA 'SAVE 4 BITS AS HIGHT TETRADE ALA 12_D1 ARA 8_D1 STV0 TMP1 WAIT42: IBA 102_M1 'READ READER STATUS ANA7 2_H2 ' TEST A WITH "READY TO SEND" MASK JAZ WAIT42 ' IF READER IS NOT READY YET - WAIT IBA 002_M1 ' READ THE DATA 'SAVE 4 BITS AS LOW TETRADE ALA 12_D1 ARA 12_D1 'AND ADD HIGHT TETRADE ADV0 TMP1 'OBA 0_H1 'AND SEND TO TTY 'OBA 402_M1 'STOP READER 'CRC CHANGING STV0 TMP1 'SAVE A LDV0 NO_CRC NAZ NO_CRC4 'NO NEED TO CHANGE CRC 'CRC+=A WITH OVERFLOW ADDED TO 0 BIT LDV0 CRC ADV0 TMP1 'ADD NEW BYTE NOV NOOVER4 INA NOOVER4: STV0 CRC NO_CRC4: LDV0 TMP1 'LOAD A 'LDB7 "00" 'ORB 'OBB 0_H1 'SEND DIGIT TO TTY JMP2 RETADDR 'RETURN '--------------------------------------------------------------------------------- READ8: 'OBA 602_M1 'START READER 'IBA 002_M1 'READ A BYTE - FOR CLEAR READY FLAG WAIT: IBA 102_M1 'READ READER STATUS ANA7 2_H2 ' TEST A WITH "READY TO SEND" MASK JAZ WAIT ' IF READER IS NOT READY YET - WAIT IBA 002_M1 ' READ THE DATA 'OBA 402_M1 'STOP READER 'CRC CHANGING STA0 TMP2 'SAVE A LDV0 NO_CRC NAZ NO_CRC8 'NO NEED TO CHANGE CRC 'CRC+=A WITH. CRC - 2 BYTES, A - 1 BYTE, N<256 SO NO OVERFLOWS LDA0 TMP2 ADA0 CRC STA0 CRC NO_CRC8: LDA0 TMP2 'LOAD A 'LDB7 0_h2 'ORB 'OBB 0_H1 'SEND DIGIT TO TTY 'OBA 402_M1 'STOP READER 'HLT 'OBB 602_M1 'START READER 'IBB 002_M1 'READ A BYTE - FOR CLEAR READY FLAG JMP2 RETADDR 'RETURN '--------------------------------------------------------------------------------- '--------------------------------------------------------------------------------- READADDR: READ8 RETADDR: 0_H1 RETADDR_L: 0_H1 'RETURN ADDRESS FOR "READ" (2-BYTE) PRG_ADDR2: 0_H1 PRG_ADDR1: 0_H1 LNG2: 0_H1 'LENGHT OF THE BLOCK (FOR 2-BYTE READ) LNG: 0_H1 'LENGHT OF THE BLOCK NO_CRC: 1_H1 ' WHEN NOT 0, CRC OMMITED - FOR READING CRC BYTE CRC: 0_H2 'CONTROL SUMM. HAVE TO BE AFTER NO_CRC!!!!! TMP2: 0_H1 TMP1: 0_H1 '--------------------------------------------------------------------------------- ^ ^ WARNING: Begin = 0; Starting from zerro memory word.