home *** CD-ROM | disk | FTP | other *** search
/ No Fragments Archive 10: Diskmags / nf_archive_10.iso / MAGS / DNTPAPER / DNT_04.MSA / ARCHIVES.DNT / SOURCES.ZIP / MONOEMUL / MONO_EM6.S < prev    next >
Text File  |  1992-12-11  |  14KB  |  426 lines

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ; The Blitter Mono Emulator. V6.00 By Nullos//DNT-Crew 1992
  3. ;
  4. ; ...is based on the Mick West's MONO_EMU V5.00
  5. ; This new version contains more options, and was entirely recoded.
  6. ; Please use GENST 2.20 (or later) with "Tab setting: 11".
  7. ; Have fun, and keep the pressure.
  8. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  9.     RSRESET
  10. Mono    rs.l    1        ; Base address of mono screen
  11. Med    rs.l    1        ; --------------- medium screen
  12. MonoPos    rs.w    1        ; Offset in both screens
  13. MonoLines    rs.w    1        ; Pairs of mono lines per VBL
  14. Swap0    rs.w    1        ; Odd and even lines, for the
  15. Swap1    rs.w    1        ; new algorith.
  16. __size    rs.b    0        ; Size of this struct.
  17. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  18. ;        Some sys-vars used in this program...
  19. ; Shifter
  20. v_base_h    equ    $ffff8201
  21. v_base_m    equ    $ffff8203
  22. v_base_l    equ    $ffff820d
  23. v_color0    equ    $ffff8240
  24. v_color1    equ    $ffff8242
  25. v_color2    equ    $ffff8244
  26. v_color3    equ    $ffff8246
  27. v_resol    equ    $ffff8260
  28. ; Blitter
  29. BLIT_base    equ    $ffff8a00
  30. b_raster    equ    $0
  31. b_src_xinc    equ    $20
  32. b_src_yinc    equ    $22
  33. b_src_adr    equ    $24
  34. b_mask1    equ    $28
  35. b_mask2    equ    $2a
  36. b_mask3    equ    $2c
  37. b_dst_xinc    equ    $2e
  38. b_dst_yinc    equ    $30
  39. b_dst_adr    equ    $32
  40. b_x_count    equ    $36
  41. b_y_count    equ    $38
  42. b_hop    equ    $3a
  43. b_op    equ    $3b
  44. b_ctrl    equ    $3c
  45. b_mode    equ    $3d
  46. ;
  47. flock    equ    $43e
  48. _v_bas_ad    equ    $44e
  49. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  50.     OPT    O+        ; Optimiz branch and 0(An)
  51.     OPT    W-        ; No warning.
  52.     OUTPUT    MONO_EM6.PRG    ;
  53.  
  54. SystemSSP    bra    MAIN        ; This place is further used
  55.                 ; to store Super() result
  56. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  57. ;Make the emulator run !.
  58. LastWill    move.l    #XBIOS,$B8.w    ; Set up the new XBIOS vector,
  59.     move.l    #VBLANK,$70.w    ; the new VBLANK vector and
  60.     move.l    SystemSSP(pc),-(sp)    ; Restore the Supervisor stack
  61.     move.w    #$20,-(sp)        ; And go back to User mode
  62.     trap    #1        ;
  63.     clr.w    (sp)        ; Exit ok for GEM
  64.     move.l    a6,-(sp)        ; Length of program + data space
  65.     move.w    #$31,-(sp)        ; terminate and stay resident (TSR)
  66.     trap    #1        ; Finished this AUTO program
  67. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  68. ; This is the new XBIOS routine
  69. ; We are allowed to use A0/D0 (and maybe D0-D2/A0-A2, but I'm not sure)
  70. ; without saving.
  71.     dc.b    'XBRA'        ; XBRA specifications
  72.     dc.b    'MEMU'        ; great name isn't it ?
  73.     dc.l    0        ; old_vec
  74. XBIOS    lea    6(sp),a0        ; a0=SSP+6, after SR&PC
  75.     btst    #5,(sp)        ; Call from Super ?
  76.     bne.s    *+4        ;
  77.     move.l    usp,a0        ; No, get the user stack
  78.     move.w    (a0)+,d0        ; Get XBIOS instruction code
  79.     subq.w    #2,d0        ; Physbase ?
  80.     beq.s    .xphys        ;
  81.     subq.w    #2,d0        ; Getrez ?
  82.     beq.s    .xgrez        ;
  83.     subq.w    #1,d0        ; Setscreen ?
  84.     beq.s    .xset        ;
  85. .xend    move.l    XBIOS-4(pc),a0    ; No, let the standard Xbios
  86.     jmp    (a0)        ; have fun with this call.
  87.  
  88. .xphys    move.l    VARS+Mono(pc),d0    ; The pseudo-monochrome screen
  89.     rte            ;
  90.  
  91. .xgrez    moveq    #2,d0        ; We are in monochrome, believe
  92.     rte            ; me...
  93.  
  94. .xset    addq.l    #4,a0        ; Look for physbase
  95.     move.l    (a0),d0        ; get the wanted physbase
  96.     bmi.s    .x0        ; no change ?
  97.     move.l    d0,VARS+Mono    ; keep it in mind
  98. .x0    moveq    #-1,d0        ;
  99.     move.l    d0,(a0)+        ; No change of rezol
  100.     move.w    d0,(a0)+        ; and physbase
  101.     bra.s    .xend        ;
  102. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  103. Palette    dc.w    0,0,0
  104. ; This is the new VBLANK routine
  105.     dc.b    'XBRA'        ; XBRA specifications
  106.     dc.b    'MEMU'        ; Wooow, I love MEMU
  107.     dc.l    0        ; old_vec
  108. VBLANK    movem.l    d0-a6,-(sp)    ; Save all registers
  109.     lea    VARS(pc),a6    ; Var in memory
  110.  
  111.     moveq    #0,d0        ; Set up colors in registers
  112.     movem.w    Palette(pc),d1-d3    ; D0 to D3 (D0=black)
  113.     lsr.w    v_color0.w        ; Check inverted (bit 0)
  114.     bcc.s    *+4        ; is it ?
  115.     exg.l    d0,d3        ; yes, invert B&W colors
  116.     movem.w    d0-d3,v_color0.w    ;
  117.     moveq    #0,d0                 ;
  118.     move.b    v_base_h.w,d0    ; Video base
  119.     lsl.l    #8,d0        ; 
  120.     move.b    v_base_m.w,d0    ;
  121.     lsl.l    #8,d0        ;
  122.     move.b    v_base_l.w,d0    ; Don't forget low byte for STE!
  123.     movea.l    Med(a6),a1        ; a1 = phys.screen (Medium rez)
  124.     cmp.l    a1,d0        ; Another physical monoscreen
  125.     beq.s    GetScreen        ; is wanted ?
  126.     move.l    d0,Mono(a6)    ; Ok, remember its location
  127.     move.l    a1,d0        ; and put the Med screen back
  128.     move.b    d0,v_base_l.w    ; to its original position
  129.     lsr.w    #8,d0        ;
  130.     move.l    d0,$ffff8200.w    ;
  131.  
  132. GetScreen    movea.l    Mono(a6),a0    ; get virtual mono phys.screen
  133.     move.w    MonoPos(a6),d2    ; Get position in the screen RAM
  134.     move.w    d2,d3        ; D3 is used later...
  135.     mulu.w    #160,d2        ; Address offset
  136.     adda.l    d2,a0        ; Offset position in mono screen
  137.     adda.l    d2,a1        ; Offset pos in real medium screen
  138.     adda.w    Swap0(a6),a0    ; First or second pass
  139.     adda.w    Swap1(a6),a1    ; 
  140.  
  141.     move.w    MonoLines(a6),d0    ; get preset speed
  142.     tst.w    flock.w        ; Disk access ?.
  143.     beq.s    *+4        ; If yes, use low speed (2)
  144.     moveq    #2,d0        ; so TOS can run faster.
  145.  
  146.     lea    BLIT_base.w,a2    ; Blitter registers
  147.     move.w    b_y_count(a2),d4    ; Y_count for fun
  148.     tst.b    b_ctrl(a2)        ; Is blitter active ?
  149.     bpl.s    vbl_0        ; no,skip this
  150.     moveq    #0,d4        ; 
  151. wait_blit    tas    b_ctrl(a2)        ; Wait end of its work
  152.     bmi.s    wait_blit        ;
  153. vbl_0    movem.l    b_src_xinc(a2),d5-d7/a3-a5 ;Save all registers
  154.     move.l    b_hop(a2),-(sp)    ;
  155.     moveq    #-1,d1        ; Prepare mask
  156.     move.l    d1,b_mask1(a2)    ;
  157.     move.w    d1,b_mask3(a2)    ;
  158.     bra.s    vbl_8        ;
  159.  
  160. vbl_6    move.l    a0,b_src_adr(a2)    ; Next mono line
  161.     move.l    a1,b_dst_adr(a2)    ; Next mid-rez line
  162.     move.l    #$20052,b_src_xinc(a2); On mono line
  163.     move.l    #$40004,b_dst_xinc(a2); Two planes,every mid-rez line
  164.     move.w    #$0203,b_hop(a2)    ; Source only& No logical op
  165.     move.l    #$280005,b_x_count(a2); Please transfert 40 words*5
  166.     move.w    #$c000,b_ctrl(a2)    ; HOG on..and Blitter starts !
  167.     addq.w    #5,b_y_count(a2)    ; another 5*40...
  168.     move.w    #$c000,b_ctrl(a2)    ; The blitter refresh all its
  169.                 ; registers, so the 2 transferts
  170.                 ; can be linked easely.
  171. vbl_7    lea    20*80(a0),a0    ; next mono lines
  172.     lea    10*160(a1),a1    ; next mid-rez lines
  173.     addi.w    #10,d3        ; +10 lines
  174.     cmpi.w    #200,d3        ; end of screen
  175.     bne.s    vbl_8        ; no
  176.     moveq    #0,d3        ; yes !
  177.     lea    -32000+$0050(a0),a0    ; restart addresses for
  178.     lea    -32000+$0002(a1),a1    ; mono and mid-rez screen.
  179.     eori.l    #$00500002,Swap0(a6)    ; odd <-> even lines
  180.     bne.s    vbl_8        ; from even to odd lines ?
  181.     lea    -160(a0),a0    ; No, come back to the start
  182.     subq.l    #4,a1        ; of the two screens...
  183. vbl_8    dbf    d0,vbl_6        ; next group of lines
  184.  
  185. vbl_10    move.w    d3,MonoPos(a6)    ; save position
  186.     movem.l    d5-d7/a3-a5,b_src_xinc(a2);Restore all registers,except
  187.     move.l    (sp)+,b_hop(a2)    ; the y_count one
  188.     tst.w    d4        ; y_count must be restored ?
  189.     beq.s    vbl_end        ; No,skip this
  190.     move.w    d4,b_y_count(a2)    ; Hop !
  191. vbl_end    movem.l    (sp)+,d0-a6    ; Restore all registers
  192.     move.l    VBLANK-4(pc),-(sp)    ; Jump to normal VBLANK routine
  193.     rts            ; using XBRA field
  194.  
  195. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  196. ; Resident datas for screen convertion.
  197. VARS    dcb.b    __size,0
  198.  
  199. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  200. ;Here stands the mid-rez screen location...
  201.  
  202. ;Main part of the program. Because it's here, we can save some bytes
  203. ;because this code will be killed (it's in the mid-rez screen location).
  204. MAIN    lea    VARS(pc),a5    ; 
  205.     move.l    4(sp),a6        ; Save the basepage address
  206.     move.w    #4,-(sp)        ;
  207.     trap    #14        ; Get screen resolution
  208.     addq.l    #2,sp        ;
  209.     subq.w    #2,d0        ; 
  210.     blt.s    RunMEMU        ; If resol>=2 (mono or TT-VGA)
  211.     pea    Rez_error(pc)    ; then break..
  212.     move.w    #9,-(sp)        ;
  213.     trap    #1        ;
  214.     clr.w    (sp)        ;
  215.     trap    #1        ; 
  216.  
  217. RunMEMU    clr.l    -(sp)        ;
  218.     move.w    #$20,-(sp)        ;
  219.     trap    #1        ; Enter supervisor mode
  220.     addq.l    #6,sp
  221.     move.l    d0,SystemSSP    ; Save the old supervisor stack
  222.  
  223.     movea.l    $70.w,a0        ; Look for the XBRA "MEMU"
  224.     moveq    #-1,d0        ; in the VBL list.
  225. Next_Xbra    cmpi.l    #"XBRA",-12(a0)    ;
  226.     bne.s    Next_Vect        ;
  227.     cmpi.l    #"MEMU",-8(a0)    ; Is MEMU here ?
  228.     beq.s    abort_prg        ; yes,must quit
  229.     move.l    -4(a0),a0        ; next vector
  230.     bra.s    Next_Xbra        ;
  231.  
  232. Next_Vect    tst.w    d0        ; Test done with Trap 14 ?
  233.     beq.s    Ok        ; yes, so it's really ok.
  234.     movea.l    $b8.w,a0        ;
  235.     moveq    #0,d0        ;
  236.     bra.s    Next_Xbra        ; Now, look for Trap 14
  237.  
  238. Ok    movea.l    a7,a0        ; save current ssp
  239.     movea.l    $8.w,a1        ; save old vector
  240.     move.l    #no_blitter,$8.w    ; The new one !
  241.     tst.w    BLIT_base.w    ; Try to access blitter
  242.     bra.s    blitter_is_here    ; yes it is. 
  243. no_blitter    move.l    a1,$8.w        ; bus error,there's no blitter.
  244.     movea.l    a0,a7        ;
  245.     pea    Blit_error(pc)    ; Print "Schmuckhead !"
  246.     move.w    #9,-(sp)        ;
  247.     trap    #1        ;
  248.     move.w    #7,(sp)        ;
  249.     trap    #1        ;
  250.     addq.l    #6,sp        ;
  251. abort_prg    pea    Cls(pc)        ;
  252.     move.w    #9,-(sp)        ;
  253.     trap    #1        ;
  254.     move.l    SystemSSP(pc),(sp)    ;
  255.     move.w    #$20,-(sp)        ;back to user mode
  256.     trap    #1        ;
  257.     clr.w    (sp)        ;abort prg.
  258.     trap    #1        ;
  259.  
  260. blitter_is_here
  261.     move.l    a1,$8.w        ; restore old vector
  262.     pea    Present(pc)              ; What is it ?
  263.     move.w    #9,-(sp)        ; Print startup message
  264.     trap    #1        ;
  265.     addq.l    #6,sp        ;
  266. GetSpeed    pea    SelectSpeed(pc)    ;
  267.     move.w    #9,-(sp)        ; Print input message
  268.     trap    #1        ;
  269.     move.w    #1,(sp)        ;
  270. NextKey    trap    #1        ; Waiting for keyboard
  271.     cmpi.w    #$1B,d0        ; ESC pressed ?
  272.     beq.s    abort_prg        ; yes
  273.     tst.w    d0        ;
  274.     beq.s    NextKey        ; not an ASCII caract.
  275.     cmpi.b    #"-",d0        ; Old algorithm ?
  276.     bne.s    *+8        ; No
  277.     bsr    CopyOldCode    ; Yes, replace the code
  278.     bra.s    NextKey        ;
  279.     addq.l    #6,sp        ;
  280.     sub.w    #"0",d0        ; Convert ASCII to 0..9
  281.     bmi.s    GetSpeed        ;
  282.     cmp.w    #10,d0        ;
  283.     bge.s    GetSpeed        ;
  284.     add.w    d0,d0        ; D0=0,2,4,6,..,18
  285.     bne.s    *+4        ; But '0'=100/5=20
  286.     moveq    #20,d0        ;
  287.     move.w    D0,MonoLines(a5)    ;=>number of lines per VBL
  288.  
  289. GetPal    pea    SelectColors(pc)    ;Select colours
  290.     move.w    #9,-(sp)        ;
  291.     trap    #1        ;
  292.     move.w    #1,(sp)        ;
  293.     trap    #1        ;
  294.     addq.l    #6,sp        ;
  295.     moveq    #0,d1        ;
  296.     subi.w    #"1",d0        ;
  297.     bmi.s    SetPal        ;
  298.     cmpi.w    #2,d0        ;
  299.     bgt.s    SetPal        ;
  300.     move.w    d0,d1        ;
  301. SetPal    mulu    #6,d1        ;
  302.     lea    Pal_Buf(pc),a0    ;
  303.     adda.w    d1,a0        ;
  304.     lea    Palette(pc),a1    ;
  305.     move.l    (a0)+,(a1)+    ;
  306.     move.w    (a0)+,(a1)+    ;
  307.  
  308.     move.l    _v_bas_ad.w,Mono(a5)    ; Set "virtualy physic" screen
  309.     move.l    $B8.w,XBIOS-4    ; Get the old XBIOS address and
  310.     move.l    $70.w,VBLANK-4    ; VBLANK and insert into new versions
  311.     clr.w    MonoPos(a5)    ; Set offset to top of screen
  312.     lea    MAIN+256(pc),a2    ; A2 = start of free memory
  313.     move.l    a2,d0        ; Force it to a 256 byte boundry
  314.     clr.b    d0        ;
  315.     move.l    d0,Med(a5)        ; Set Med
  316.  
  317.     move.l    d0,d1        ;
  318.     move.b    d1,v_base_l.w    ; Now, it's the definitive
  319.     lsr.w    #8,d1        ; physical screen (real physic)
  320.     move.l    d1,$ffff8200.w    ;
  321.  
  322.     sub.l    a6,d0        ; Calculating memory used..
  323.     move.l    d0,a6        ; =screen end-code start
  324.     lea    32000(a6),a6    ; result in A6
  325.  
  326.     moveq    #-1,d0        ;
  327.     move.w    #2,-(sp)        ; Hardware and Software to Mono
  328.     move.l    d0,-(sp)        ;
  329.     move.l    d0,-(sp)        ;
  330.     move.w    #5,-(sp)        ;
  331.     trap    #14        ; Set high resolution
  332.     lea    12(sp),sp        ;
  333.     move.l    #SingleVBL,$70.w    ; Dummy VBL to avoid reset...
  334.     move.w    #1,Vsync        ; Set raster flag to 'not occured yet'
  335.  
  336. WaitSync    tst.w    Vsync        ; If still not occured
  337.     bne.s    WaitSync        ; then loop until a vbl does occur
  338.     move.b    #1,v_resol.w    ; Back to medium hardware after VBL 
  339.     bra    LastWill        ; Install everything
  340. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  341. ; This is a simple Vblank routine that just clears a flag 
  342. SingleVBL
  343.     clr.w    Vsync        ; Indicate a Vertical blank has occured
  344.     rte            ;
  345. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  346. ;Copy the old algortihm at the right place.
  347. CopyOldCode
  348.     movem.l    a0-a2,-(sp)    ; Copy from high to low.
  349.     lea    vbl_5+4(pc),a0    ; Start from "dbf" in the
  350.     lea    vbl_8+4(pc),a1    ; source and destination
  351.     lea    vbl_2(pc),a2    ; code (4 bytes for dbf)
  352. .bcl    move.w    -(a0),-(a1)    ;
  353.     cmpa.l    a0,a2        ;
  354.     bne.s    .bcl        ;
  355.     movem.l    (sp)+,a0-a2    ;
  356.     rts
  357. ;This is the old algorithm. It's 16 bytes shorter than the new one.
  358. ;So we can copy it directly.
  359. vbl_2    moveq    #1,d2        ; for DBF (2 planes)
  360. vbl_3    move.l    a0,b_src_adr(a2)    ; Next mono line
  361.     move.l    a1,b_dst_adr(a2)    ; Next mid-rez line
  362.     move.l    #$20052,b_src_xinc(a2); On mono line
  363.     move.l    #$40004,b_dst_xinc(a2); Two planes,every mid-rez line
  364.     move.w    #$0203,b_hop(a2)    ; Source only& No logical op
  365.     move.l    #$280005,b_x_count(a2) ;Please transfert 40 words*5
  366.     move.w    #$c000,b_ctrl(a2)    ; HOG on and Blitter start
  367.  
  368. vbl_4    addq.l    #2,a1        ; Now,the same but for the
  369.     lea    80(a0),a0        ; next mid-rez plane
  370.     dbf    d2,vbl_3        ;
  371.     lea    10*80-160(a0),a0    ; next mono lines
  372.     lea    5*160-4(a1),a1    ; next mid-rez lines
  373.     addq.w    #5,d3        ; +5 lines
  374.     cmpi.w    #200,d3        ; end of screen
  375.     bne.s    vbl_5        ; no
  376.     moveq    #0,d3        ; yes !
  377.     lea    -32000(a0),a0    ; restart addresses
  378.     lea    -32000(a1),a1    ;
  379. vbl_5    dbf    d0,vbl_2        ; next group of lines
  380. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  381.     SECTION    DATA
  382. ;The three different palettes!. Change them if you think they're ugly,
  383. ;but please choose an odd Blue component (1,3,5,...,D,F) for the last
  384. ;one...
  385. Pal_Buf    dc.w    $ccc,$ccc,$FFF
  386.     dc.w    $354,$354,$DF7
  387.     dc.w    $35d,$35d,$6FF
  388. ;
  389.  
  390. Present    dc.b    27,'E'
  391.     DCB.B    40,$ed
  392.     dc.b    13,10
  393.     dc.b    $ed,'        ',27,'pThe Mono Emulator V6.0',27,'q        ',$ed,13,10
  394.     dc.b    $ed,'--------------------------------------',$ed,13,10
  395.     dc.b    $ed,'Feel free to give away copies of this,',$ed,13,10
  396.     dc.b    $ed,'but please copy the whole folder.     ',$ed,13,10
  397.     dc.b    $ed,'                                      ',$ed,13,10
  398.     dc.b    $ed,'Send Problems to:    Sylvain LANGLADE ',$ed,13,10
  399.     dc.b    $ed,'                62bis rue de l''Oradou ',$ed,13,10
  400.     dc.b    $ed,'               63000 Clermont Ferrand ',$ed,13,10
  401.     dc.b    $ed,'                               FRANCE ',$ed,13,10
  402.     dc.b    $ed,'--------------------------------------',$ed,13,10
  403.     dc.b    $ed,'     (C)oderight NulloS//DNT 1992     ',$ed,13,10
  404.     DCB.B    40,$ed
  405.     dc.b    13,10,10,0
  406.  
  407. SelectSpeed
  408.     dc.b    13,10
  409.     dc.b    'Please enter speed (ESC=Abort)...',13,10
  410.     dc.b    "['1'=10,'2'=20...'9'=90,'0'=100]..?:",0
  411.  
  412. SelectColors
  413.     dc.b    13,10
  414.     dc.b    'And now, the colours (Default=White)',13,10
  415.     dc.b    "['1'=White, '2'=Green, '3'=Blue]..?:",0
  416.  
  417. Blit_error    dc.b    13,10,"The Mono Emulator V6.00 can't",13,10
  418.     dc.b    "run without blitter !!!....",13,10,0
  419.  
  420. Rez_error    dc.b    13,10,"The Mono Emulator V6.00 needs ST-Low or",13,10
  421.     dc.b    "ST-Mid resolution... Sorry !",13,10,0
  422.  
  423. Cls    dc.b    13,27,'E ',0
  424. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  425.     SECTION    BSS
  426. Vsync    ds.w    1