Davex/src/xtn/2/mx80.asm
2018-09-16 21:01:16 -04:00

280 lines
4.7 KiB
NASM

;*********************************************
;
; MX80 setup
;
; Options:
; -n normal
; -z zap (re-init everything)
; -b y|n boldface
; -e y|n emphasized
; -i y|n italics
; -u y|n underline
; -s y|n skip over perf
; -8 y|n 8 lines/inch
; -l # form length
; -p # pitch
; -1 y|n unidirectional print
;
; by Dave Lyons
; 12-Jul-86
;
; 21-Jul-88 DAL ==> v1.1
; souce --> Merlin
; Fixed xprint_drvr usage: uses refnums now
;
;*********************************************
;
; Converted to MPW IIgs 20-Sep-92 DAL
;
;*********************************************
.include "Common/2/Globals2.asm"
.include "Common/2/Apple.Globals2.asm"
.include "Common/2/Mli.globals2.asm"
.include "Common/Macros.asm"
.segment "CODE_AE00"
;
OrgAdr = $AE00
; org OrgAdr
MyVersion = $11
MinVersion = $10
;*********************************************
RTS
.byte $EE,$EE
.byte MyVersion,MinVersion
.byte %00000000 ;hardware req
.addr Descr
.addr OrgAdr
.addr Start
.byte 0,0,0,0
; PARAMETERS HERE
my_parms: .byte $80+'z',t_nil
.byte $80+'n',t_nil
.byte $80+'b',t_yesno
.byte $80+'e',t_yesno
.byte $80+'i',t_yesno
.byte $80+'u',t_yesno
.byte $80+'s',t_int2
.byte $80+'8',t_yesno
.byte $80+'p',t_int2
.byte $80+'l',t_int2 ;form length
.byte $80+'1',t_yesno
.byte 0,0
;
Descr: pstr "Sets up MX80 options"
;
end = $ff
;*********************************************
; dum xczpage
mxTemp = xczpage ;.res 1
value = mxTemp+1 ;.res 1
refnum = value+1 ;.res 1
; dend
;*********************************************
Start:
;
; open the printer
;
lda #0 ;open config'd prtr slot
ldx #mli_open
jsr xprint_drvr
bcc opened
jmp xProDOS_err
opened:
sta refnum
;
; do each parameter
;
ldy #0
parmloop: lda my_parms,y
ora my_parms+1,y
beq parms_done
tya
pha
jsr do_one
pla
tay
iny
iny
bne parmloop
;
parms_done:
;
; close the printer
;
ldy refnum
ldx #mli_close
jmp xprint_drvr
;*******************************
;
; do_one -- dispatch to a
; subroutine to handle each
; parameter given
;
do_one: pha
lda my_parms,y
jsr xgetparm_ch
bcs not_given
pla
tay
lda subtable+1,y
pha
lda subtable,y
pha
lda my_parms,y
jmp xgetparm_ch
not_given:
pla
rts
;
; table of addresses for handling
; each parameter
;
subtable:
.addr do_zap-1
.addr do_normaltxt-1
.addr do_bold-1
.addr do_emphasize-1
.addr do_italics-1
.addr do_underline-1
.addr do_skipperf-1
.addr do_eight-1
.addr do_pitch-1
.addr do_flength-1
.addr do_unidir-1
;
; Print 1 char to the printer driver
;
print_esc:
lda #esc
Print: ldx #mli_write
ldy refnum
jmp xprint_drvr
;*******************************
do_bold:
ldy #bold-stuff
jmp do_yesno
;
do_emphasize:
ldy #emphasize-stuff
jmp do_yesno
;
do_italics:
ldy #italics-stuff
jmp do_yesno
;
do_underline:
ldy #underline-stuff
jmp do_yesno
;
do_skipperf:
cpy #0 ;-s0?
bne skippf
ldy #noskip-stuff
jmp print_y
;
skippf: sty value
ldy #skip-stuff
jsr print_y
lda value
jmp Print
;
do_eight:
ldy #eight-stuff
jmp do_yesno
;
do_pitch:
cpy #5
beq pitch5
cpy #8
beq pitch8
cpy #10
beq pitch10
cpy #17
beq pitch17
jsr xmess
cstr_cr "illegal pitch--use 5, 8, 10, 17"
rts
;
pitch5: ldy #p5-stuff
jmp print_y
pitch8: ldy #p8-stuff
jmp print_y
pitch10: ldy #p10-stuff
jmp print_y
pitch17: ldy #p17-stuff
jmp print_y
;
do_flength:
sty value
ldy #formlen-stuff
jsr print_y
lda value
jmp Print
;
do_unidir:
ldy #unidir-stuff
jmp do_yesno
;
do_zap:
ldy #zap-stuff
jmp print_y
;
do_normaltxt:
ldy #normaltxt-stuff
jmp print_y
;*******************************
do_yesno: cmp #0
bne print_y
jsr skip_str
print_y: lda stuff,y
cmp #$ff
beq printed
sty mxTemp
jsr Print
ldy mxTemp
iny
bne print_y
printed: rts
;*******************************
skip_str: lda stuff,y
cmp #$ff
beq skipped
iny
bne skip_str
skipped: iny
rts
;*******************************
;
stuff:
bold: .byte esc,'G',end
.byte esc,'H',end
emphasize: .byte esc,'E',end
.byte esc,'F',end
italics: .byte esc,'4',end
.byte esc,'5',end
underline: .byte esc,'-',1,end
.byte esc,'-',0,end
eight: .byte esc,'0',end
.byte esc,'2',end
unidir: .byte esc,'U',1,end
.byte esc,'U',0,end
zap: .byte esc,'@',end
skip: .byte esc,'N',end
noskip: .byte esc,'O',end
formlen: .byte esc,'C',end
;
p5: .byte esc,'W',1,18,end
p8: .byte esc,'W',1,15,end
p10: .byte esc,'W',0,18,end
p17: .byte esc,'W',0,15,end
normaltxt:
.byte esc,'H',esc,'G',esc,'5',esc,'-',0
.byte esc,'2',esc,'U',0,esc,'O'
.byte esc,'W',0,18,end