; Compiles online at https://www.asm80.com/ ; Hex bytes checked against Byte Mag listing. ; Untested as of 2026-08-27. .CPU 8080 ; ************************************************************** ; ; MDOS RES - BUBBLE DRIVER LINKAGE ; ; Copyright (C) 1983 Louis E. Wheeler ; ************************************************************** ORG 2B00H ; DUMMY ORG FOR LOADER NOP ; ORG 0968H ; UNIT NUMBER CK PATCH ; CPI 02H ; CHECK LEGAL DRIVE JNC BUBRES ; NO. ITS A BUBBLE. ; ORG 06FEH ; FIX FOR PRINTER INIT. XRA A RET ; ; RESIDENT INTERFACE FOR BUBBLE MEMORY DRIVERS ; ; ; SYSTEM EQUATES: (BM function addr's equate to EEPROM jump table) ; atBMINIT EQU 0F018H ; INITIALIZE BUBBLE MEMORY atBMREAD EQU 0F01BH ; READ BUBBLE MEMORY RECORD atBMWRIT EQU 0F01EH ; WRITE BUBBLE MEMORY RECORD ; SBLKLEN EQU 0004H ; BLOCK LENGTH=4 PAGES SCANALS EQU 01H ; NUMBER OF FSA CHANNELS=2 SENABLE EQU 20H ; ENABLE BYTE=RCD & HI-SPD SBEGADR EQU 0000H ; BEGIN ADDR=PAGE 0 SMEMSEL EQU 00H ; BUBBLE NUM SELECT=FIRST ; ; BUBRES: LDA 1221H ; GET 1ST CODE ORA A ; IF CODE = JZ BINOUT ; 00 - GO CK 2ND CODE CPI 04H JZ BOPEN ; 04 - IT'S AN OPEN CPI 08H JZ BCLOSE ; 08 - IT'S A CLOSE JMP 0FF4H ; "PARM ERROR" EXIT. ; BINOUT: MVI E,3 ; ERR RETRY CNT LDA 1222H ; GET 2ND CODE CPI 06H JZ BPUT ; 06 - IT'S A PUT CPI 09H JZ BGET ; 09 - IT'S A GET JMP 0FF4H ; "PARM ERROR" EXIT. ; BOPEN: STA OCFLAG ; SET OPEN FLAG CALL INITPB ; INITIALIZE PARAM BLOCK CALL atBMINIT ; GO INITIALIZE BUB MEM JMP 09FCH ; EXIT ; BCLOSE: STA OCFLAG ; SET CLOSE FLAG JMP 09FCH ; EXIT ; OCFLAG: DB 08H ; OPEN/CLOSE FLAG ; 04 = OPEN 08 = CLOSED BGET: CALL BSETUP ; GO SET UP CNTL BLK BRDRPT: CALL atBMREAD ; GO READ REL JNC 09FCH ; GOOD READ, EXIT. DCR E ; BUMP RETRY CNT JNZ BRDRPT ; TRY ONCE AGAIN. JMP 0FFAH ; "PERM ERROR" EXIT. ; BPUT: CALL BSETUP ; GO SET UP CNTL BLK BWRRPT: CALL atBMWRIT ; GO WRITE REC JNC 09FCH ; GOOD PUT, EXIT. DCR E ; BUMP RETRY CNT JNZ BWRRPT ; TRY ONCE AGAIN. JMP 0FFAH ; "PERM ERROR" EXIT. ; BSETUP: LDA OCFLAG ; CK FILE OPEN CPI 04H JZ SETREC ; YES, GO ON. POP H ; CLEAR STACK JMP 1000H ; "FILE NOT OPEN" EXIT. SETREC: LHLD 1227H ; SET UP REC # DAD H ; MULTIPLY BY 4 DAD H ; (64 X 4 = 256 BYTES) SHLD BEGADR ; PLACE IN PARAM BLOCK LHLD 1223H ; GET BUF ADDR SHLD BUFADR ; PLACE IN PARAM BLOCK LXI H,PARAMBLK ; HL=PARAMETER BLOCK FWH RET ORG 067EH ; AN EMPTY AREA ... ; ; INITPB: LXI H,SBLKLEN ; SET BLOCK LENGTH SHLD BLKLEN ; MVI A,SCANALS ; SET NUMBER FSA CHANNELS STA CANALS ; MVI A,SENABLE ; SET ENABLE BYTE STA ENABLE ; LXI H,SBEGADR ; SET BEGINNING PAGE NO. SHLD BEGADR ; XRA A ; SET BM BANK SELECT STA MBMSEL ; LXI H,PARAMBLK ; SET HL=FWH PARAMETER BLK RET ; PARAMETER BLOCK ; PARAMBLK: EQU $ ; BLKLEN DW 0000H ; BLOCK LENGTH (PAGES) CANALS DB 00H ; NUMBER OF FSA CHANNELS ENABLE DB 00H ; ENABLE/CNTRL BYTE BEGADR DW 0000H ; BEGINNING PAGE NUMBER MBMSEL DB 00H ; BUBBLE BANK ; BUFADR DW 0000H ; USER BUFFER ADDRESS STATUS DB 00H ; RETURN STATUS ; END