DataMuseum.dkPresents historical artifacts from the history of: CR80 Hard and Floppy Disks |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CR80 Hard and Floppy Disks Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 2753 (0xac1) Types: TextFile Names: »BOOTL.SRC«
└─⟦519079be6⟧ Bits:30005500 8" CR80 Floppy CR80FD_0029 ( WBOOTL.SYS W.D bootload program 81 10 01 ??? ) └─⟦519079be6⟧ Intel_ISIS_II └─ ⟦this⟧ »BOOTL.SRC«
PAGESZ 40\r NAME BOOTL\r PUBLIC BOOTL\r ;************************************************************************\r ;\r ;\r ; * * * * * * * * *\r ; * * * * * CHRISTIAN ROVSING A/S\r ; * * * * *\r ; * * * * * PROGRAMMER: IMJ\r ; * * * * * * * * *\r ; * * * * * DATE: 800905\r ; * * * * *\r ; * * * * *\r ; * * * * * * * * *\r ;\r ;\r ;-----------------------------------------------------------------------\r ;\r ; MODULE:\r TITLE 'BOOTLOAD'\r ;\r ;-----------------------------------------------------------------------\r ;\r ; FUNCTION:\r ; MOVE PROGRAM FROM SHARED RAM TO PROGRAM MEMORY\r ;\r ;\r ;***********************************************************************\r \r \r \r SRAMB EQU 4000H ;FIRST SHARED RAM ADDRESS\r SRAME EQU 7FFFH ;LAST SHARED RAM ADDRESS\r RAMEND EQU 3FFFH ;LAST Z80 RAM ADDRESS\r STATUS EQU SRAMB ;STATUS WORD ADDRESS TO/FROM CR80\r BYTCOU EQU SRAMB+2 ;(MAX.) BYTE COUNT\r STADR EQU SRAMB+4 ;FIRST DATA ADDRESS\r ARYADR EQU SRAMB+6 ;PROGRAM START ADDRESS\r STAWAIT EQU 0AAAAH ;STATUS FROM CR80 WHEN READY TO START\r COMREDY EQU 0 ;STATUS TO CR80 WHEN Z80 READY/COMPLETED\r COMCERR EQU 2 ;STATUS TO CR80 WHEN CHECKSUM ERROR\r CSEG\r BOOTL DI\r B1LOOP LD B,200/13*4\r DJNZ $+0 ;DELAY 200 MICRO SEC.\r LD HL,(STATUS)\r LD A,H\r CP STAWAIT.HIGH.\r JP NZ,B1LOOP ;WAIT UNTILL CR80 READY\r LD A,L\r CP STAWAIT.LOW.\r JP NZ,B1LOOP\r B4LOOP LD HL,SRAME-ARYADR-1\r LD (BYTCOU),HL ;LOAD MAX BYTE COUNT\r LD HL,ARYADR\r LD (STADR),HL ;LOAD BUFFER START ADDRESS\r LD HL,COMREDY\r LD (STATUS),HL ;LOAD STATUS = READY\r B2LOOP LD B,200/13*4\r DJNZ $+0 ;DELAY 200 MICRO SECONDS\r LD HL,STATUS+1\r BIT 7,(HL)\r JR Z,B2LOOP ;WAIT UNTILL DATA FROM CR80\r LD BC,(BYTCOU) ;GET BYTE COUNT\r DEC BC ;STRIP CHECKSUM\r DEC BC\r LD HL,ARYADR\r XOR A ;INIT CHECKSUM\r INC B\r INC C\r DEC HL\r B3LOOP INC HL ;FOR DATA = ARRAY START TO LAST DATA\r ADD A,(HL) ; ADD DATA TO CHECKSUM\r DEC C\r JP NZ,B3LOOP\r DEC B\r JP NZ,B3LOOP ;NEXT DATA\r INC HL\r CP (HL) ;IF CHECKSUM ERROR THEN\r JR Z,B1ELSE\r LD HL,SRAME-ARYADR-1\r LD (BYTCOU),HL ; LOAD MAX BYTE COUNT\r LD HL,ARYADR\r LD (STADR),HL ; LOAD BUFFER START ADDRESS\r LD HL,COMCERR\r LD (STATUS),HL ; LOAD STATUS = CHECKSUM ERROR\r JP B2LOOP ; TRY AGAIN\r ;ELSE\r B1ELSE LD BC,(BYTCOU) ; GET BYTE COUNT\r DEC BC ; STRIP START ADDRESS\r DEC BC\r DEC BC ; STRIP CHECHSUM\r LD HL,ARYADR+2 ; GET FIRST DATA ADDRESS\r LD DE,(ARYADR) ; GET PROGRAM START ADDRESS\r LDIR ; MOVE DATA TO PROGRAM MEMORY\r LD A,(STATUS+1) ; SAVE STATUS FROM CR80\r BIT 6,A ; IF NOT LAST PROGRAM THEN\r JP Z,B4LOOP ; GET NEXT PROGRAM\r ; ELSE\r LD HL,COMREDY\r LD (STATUS),HL ; LOAD STATUS = COMPLETED\r HALT ; HALT\r ; ENDIF\r ;ENDIF\r END\r