Loads text into the programmable function keys.
org 100h putpfk equ 0f66fh ; Assign text @ HL to PF key biton equ 0fe55h ; B2: Printer Bit On Mode flag parm equ 0080h ; -> parameter field cr equ 0dh ldir equ 0b0edh ; lxi h,f3 !call setup lxi h,f4 !call setup lxi h,f5 !lxi b,4 !call putpfk lxi h,f6 !call setup lxi h,f7 !call setup lxi h,f8 !call setup lxi h,f9 !call setup lxi h,f0 !call setup lxi h,biton !dw 0d6cbh ; SET 2,(HL) ret setup mov a,m !inx h !sta key ; key number xra a !mov b,a !lxi d,text+1 !call move push h !lxi h,parm !mov c,m !inx h !dcr c !mov m,c ; trick call move !pop h !call move lxi h,text !mov m,a ; = total length lda key !mov c,a !jmp putpfk ; move mov c,m !inx h !add c !dw ldir ret ; f3 db 2,7,'PIP F:=',5,'.ASM',cr f4 db 3,9,'PIP A:=F:',3,'.*',cr f5 db 13,'DDT GO.COM',cr,'G',cr f6 db 5,7,'PIP F:=',5,'.OVL',cr f7 db 6,4,'ASM ',1,cr f8 db 7,4,'LAY ',1,cr f9 db 8,5,'LOAD ',1,cr f0 db 9,5,'TYPE ',5,'.PRN',cr ; key ds 1 text ds 17 end 100h
Converts the .HEX assembler output file to .OVL. The CP/M LOAD command (LOAD.COM) converted the .HEX assembler output file into an executable .COM file, but this would only work if the code origin was 0100h which was not the case with overlays.
; Convert .HEX file into .OVL boot equ 0000h bdos equ 0005h fcb equ 005ch ; ; ASCII codes-- nul equ 00h cr equ 0dh lf equ 0ah ; org 0100h lxi h,hex !call clear !mvi c,15 !call bdos !inr a !jz nofile ; Fetch HEX file-- lxi d,origin f1 lxi h,128 !dad d !push h !mvi c,26 !call bdos ; set DMA addr lxi d,fcb !mvi c,20 !call bdos !pop d !ora a !jz f1 ; next sector lxi h,origin !lxi d,origin ; Convert next record-- line inx h !call pack !jz save !lxi b,6 !dad b !mov b,a ; B=bytes l1 call pack !stax d !inx d !dcr b !jnz l1 lxi b,4 !dad b !jmp line ; Pad last sector with nul & count sectors-- save push d !mov h,d !mov l,e !mvi m,0 !inx d !lxi b,126 !call ldir pop d !lxi h,-origin !dad d !dcx h ; HL=bytes-1 mov a,l !ral !mov a,h !ral !inr a !sta count ; Delete HEX file & any previous OVL file, then open OVL file-- lxi h,hex !call clear !mvi c,19 !call bdos lxi h,ovl !call clear !mvi c,19 !call bdos lxi d,fcb !mvi c,22 !call bdos ; Write OVL file-- lxi d,origin w1 lxi h,count !dcr m !jm done lxi h,128 !dad d !push h !mvi c,26 !call bdos ; set DMA addr lxi d,fcb !mvi c,21 !call bdos !pop d !jmp w1 done lxi d,fcb !mvi c,16 !call bdos !jmp boot ; close file ; nofile lxi d,msg1 !mvi c,9 !call bdos !jmp boot ; char mov a,m !ora a !jnz $+6 !mvi a,' ' !ret inx h !cpi ' ' !jz char !cpi 'a' !rc !sui 20h !ret ; clear lxi d,fcb+9 !lxi b,3 !call ldir mov h,d !mov l,e !mvi m,0 !inx d !lxi b,20 !call ldir ; zeroise lxi d,fcb !ret ; pack call digit !rlc !rlc !rlc !rlc !mov c,a call digit !ora c !ret digit mov a,m !inx h !cpi 'A' !jc $+5 !sui 7 !ani 0fh !ret ; ldir mov a,m !stax d !inx h !inx d !dcr c !jnz ldir !ret ; hex db 'HEX' ovl db 'OVL' msg1 db cr,lf,'HEX file not found$' count ds 1 ; number of sectors origin db ':00' ; preset with empty record end 0100h
Sets the QX10 clock.
; **** SET QX10 TIME OF DAY CLOCK **** org 100h addr equ 03dh ; Clock RAM Address Register data equ 03ch ; Clock RAM Data Register ; time mvi a,10 !out addr !in data !ora a !jm time ; update in progress mvi a,11 !out addr !mvi a,8ah !out data ; stop clock lxi h,0081h ; -> parameter string mvi a,4 !out addr !call pack !out data ; hour mvi a,2 !out addr !call pack !out data ; minute mvi a,0 !out addr !call pack !out data ; second mvi a,11 !out addr !mvi a,0ah !out data ; start clock ret ; pack call char !rlc !rlc !rlc !rlc !mov e,a call char !ora e !ret ; char mov a,m !ora a !rz !inx h cpi '0' !jm char !cpi '9'+1 !jp char ; discard non-numeric ani 0fh !ret end 100h
Sets the QX10 alarm.
; **** SET QX10 ALARM TIME **** org 100h addr equ 03dh ; Clock RAM Address Register data equ 03ch ; Clock RAM Data Register ; lxi h,0081h ; -> parameter string mvi a,5 !out addr !call pack !out data ; hour mvi a,3 !out addr !call pack !out data ; minute mvi a,1 !out addr !call pack !out data ; second ret ; pack call char !rlc !rlc !rlc !rlc !mov e,a call char !ora e !ret ; char mov a,m !ora a !rz !inx h cpi '0' !jm char !cpi '9'+1 !jp char ; discard non-numeric ani 0fh !ret end 100h