************************************************************************ * * This program patches into the xbios setmode() & setscreen() functions. * Alters the video parameters set by the call so that it works with * the PTC1426 TT monitor (with switch in VGA mode). * ************************************************************************ include d:\devpac\powerdos\dos_defs.s include d:\devpac\powerdos\dosmacro.s VWRAP equ $FF8210 SPSHIFT equ $FF8266 HHT equ $FF8282 HBB equ $FF8284 HBE equ $FF8286 HDB equ $FF8288 HDE equ $FF828A HSS equ $FF828C HFS equ $FF828E HEE equ $FF8290 VFT equ $FF82A2 VBB equ $FF82A4 VBE equ $FF82A6 VDB equ $FF82A8 VDE equ $FF82AA VSS equ $FF82AC VCO equ $FF82C0 start os_fvector our_setmode(pc),#$58,#14 Change Setmode vector to go to us lea old_setmode+2(pc),a0 move.l d0,(a0) Jump to original vector os_fvector our_setscrn(pc),#5,#14 Change Setscreen vector to go to us lea old_setscrn+2(pc),a0 move.l d0,(a0) Jump to original vector p_termres #0,#end_of_it-start+256 our_setscrn cmp.w #%110010010,$e(sp) Going to ST Low Rez? beq.s .do_st_low cmp.w #%000011010,$e(sp) Going to 640x480x16? beq.s .do_640x16 cmp.w #%000011011,$e(sp) Going to 640x480x256? beq.s .do_640x256 bne.s old_setscrn .do_640x256 lea 4(sp),a0 move.w 10(a0),-(sp) move.w 8(a0),-(sp) move.l 4(a0),-(sp) move.l (a0),-(sp) pea scrn_640x256(pc) bra.s old_setscrn .do_640x16 lea 4(sp),a0 move.w 10(a0),-(sp) move.w 8(a0),-(sp) move.l 4(a0),-(sp) move.l (a0),-(sp) pea scrn_640x16(pc) bra.s old_setscrn .do_st_low lea 4(sp),a0 move.w 10(a0),-(sp) move.w 8(a0),-(sp) move.l 4(a0),-(sp) move.l (a0),-(sp) pea scrn_st_low(pc) To do ST Low Rez bra.s old_setscrn old_setscrn jmp $DEADC0DE Jump to original routine scrn_640x256 bsr _640x256 lea 12(sp),sp rts scrn_640x16 bsr _640x16 lea 12(sp),sp rts scrn_st_low bsr st_low lea 12(sp),sp rts our_setmode cmp.w #%110010010,4(sp) Going to ST Low Rez? beq.s set_st_low cmp.w #%000011010,4(sp) Going to 640x480x16? beq.s set_640x16 cmp.w #%000011011,4(sp) Going to 640x480x256? beq.s set_640x256 bne.s old_setmode set_640x256 move.w 4(sp),-(sp) pea mode_640x256(pc) To do 640x480x256 bra.s old_setmode set_640x16 move.w 4(sp),-(sp) Push parameter pea mode_640x16(pc) To do 640x480x16 bra.s old_setmode set_st_low move.w 4(sp),-(sp) pea mode_st_low(pc) To do ST Low Rez bra.s old_setmode old_setmode jmp $DEADC0DE Jump to original routine mode_640x256 bsr.s _640x256 addq.l #2,sp rts mode_640x16 bsr.s _640x16 addq.l #2,sp rts mode_st_low bsr.s st_low addq.l #2,sp rts _640x256 move.w #$7C,HBB move.w #$4,HBE move.w #$29a,HDB move.w #$73,HDE rts _640x16 move.w #$7c,HBB move.w #$4,HBE move.w #$292,HDB move.w #$6b,HDE move.w #$97,HSS rts st_low move.w #$10,HBB move.w #$0,HBE move.w #$20c,HDB move.w #$b,HDE move.w #$12,HSS rts end_of_it nop end