; **** Password Print ****
base	equ	5800h
suspend equ	0109h	; Block Voluntarily
io	equ	0130h	; Screenhandler
print	equ	0187h	; (HL) -> Printer
mark	equ	0190h	; Mark Escape Point
pcheck	equ	01a8h	; Z=Access Code & Password at (HL) correct
;
nul	equ	00h
esc	equ	1bh
time	equ	7fh
s	equ	80h
;
; Z80 OP Codes--
djnz	equ	00010h
ldir	equ	0b0edh
;
; Inter-Task Communication--
label	equ	01c2h	; -> spool Diskette Label
ctl	equ	01d0h	; System Control Block
tstate	equ	ctl+18	; B1: Buffer Area in use
;
	org	base
bwait	call	suspend !lxi h,tstate !dw 04ecbh ; BIT 1,(HL)
	jnz	bwait !dw 0cecbh ; SET 1,(HL)	; block calls
	lhld	label !lxi d,53 !dad d !lxi d,hd0a !lxi b,75 !dw ldir
	lxi	h,hd0 !call print !lxi h,hd1 !call print
	call	mark !jc done !lxi h,pt1 !call io
	lxi	h,pt2 !call io !call bin !shld val !shld max ; get Low
	lxi	h,pt3 !call io !call bin !shld max	; get High
	xchg	!lhld val !ora a !dw 052edh ; SBC HL,DE ; Low - High
	jnc	$+7 !xchg !shld max
loop	call	line !lhld val !lxi d,10 !dad d !shld val
	xchg	!lhld max !ora a !dw 052edh ; SBC HL,DE
	jnc	loop
done	lxi	h,tstate !dw 08ecbh ; RES 1,(HL) ; enable calls
	ret
;
line	lhld	val !lxi d,ln1+3 !call bd5
	mvi	a,'0' !sta ln1+7 !lxi h,ln1+10 !shld ptr
lp0	lxi	h,ln1+3 !call pcheck
	lhld	ptr !xchg !lxi b,5 !dw ldir
	xchg	!inx h !inx h !shld ptr
	lda	ln1+7 !inr a !sta ln1+7 !cpi '9'+1 !jnz lp0
	mvi	a,'0' !sta ln1+7 !lxi h,ln1 !jmp print
;
; HL -> (DE) 5xASCII--
bd5	lxi	b,10000 !call digit !lxi b,1000 !call digit
bd3	lxi	b,100 !call digit !lxi b,10  !call digit
	mvi	a,'0' !ora l !stax d !inx d !ret
digit	xra	a
di1	inr	a !dw 042edh ; SBC HL,BC
	jnc	di1 !dad b !adi '0'-1 !stax d !inx d !ret
;
bin	lxi	h,0 !ora a !rz !mov b,a 	; input -> HL binary
bn1	ldax	d !inx d !call x10 !dw djnz+(bn1-$-2)*256
	ret
; Convert A to binary, multiply HL by 10 and add A--
x10	push	d !dad h !mov d,h !mov e,l !dad h !dad h !dad d
	ani	0fh !mvi d,0 !mov e,a !dad d !pop d !ret
;
pt1	db	4,0,0e0h,'Password Table Print',s
	db	9,34,'[ESC] cancel',nul
pt2	db	esc,5,8,20,'from Access Code ',nul
pt3	db	esc,5,8,43,'upto ',nul
hd1	db	s+2,'           0      1      2      3      4      5  '
	db	'    6      7      8      9',nul
ln1	db	s+1,'  12345  00000  11111  22222  33333  44444  55555'
	db	'  66666  77777  88888  99999',nul
hd0	db	s+2,'Password Table: ',time,' '
hd0a	ds	80
val	ds	2	; Current Access Code
max	ds	2	; High Access Code
ptr	ds	2
	end	base

The QX10 Archive