home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / RG / RES_RIPR.ZIP / RES_RIPR / RESRIP_2.S < prev    next >
Encoding:
Text File  |  2005-05-03  |  41.7 KB  |  1,948 lines

  1. *********************************************************************
  2. * Reservoir Ripper II :: Coded by MrPink :: [c] 1998 Reservoir Gods *
  3. *********************************************************************
  4.  
  5. vars_y    equ    90
  6. regs_y    equ    40
  7. vecs_y    equ    6*7
  8.  
  9. start_ripper
  10.     move.l  a7,a5
  11.         move.l  4(a5),a5
  12.     lea    $80(a5),a0
  13.     move.l    a0,cmd_adr
  14.         move.l  12(a5),d0
  15.         add.l   20(a5),d0
  16.         add.l   28(a5),d0
  17.         add.l   #$100,d0
  18.         move.l  d0,-(sp)
  19.         move.l  a5,-(sp)
  20.         move    d0,-(sp)
  21.         move    #$4a,-(sp)
  22.         trap    #1
  23.         add.l   #12,sp
  24.  
  25.     move.w    #$59,-(a7)    ;get monitor
  26.     trap    #14
  27.     addq.l    #2,a7
  28.     cmp.w    #2,d0
  29.     bne.s    not_vga
  30.     st.b    vga_flag
  31. not_vga
  32.     pea    install_it(pc)
  33.     move.w    #$26,-(a7)
  34.     trap    #14
  35.     addq.l    #6,a7
  36.  
  37.     move.w    #0,-(a7)
  38.     move.l    #(end_ripper-start_ripper)+$100,-(a7)
  39.     move.w    #$31,-(a7)
  40.     trap    #1
  41.  
  42.     rts
  43.  
  44. install_it:
  45.     bsr    save_system
  46.     bsr    do_installation
  47.     rts
  48.  
  49. do_installation
  50.     move.w    sr,-(a7)
  51.     ori.w    #$0700,sr
  52.     move.l    #new_vbl,my_vector_table+$70
  53.     lea    my_vector_table,a0
  54.     movec    a0,VBR
  55.     move.w    (a7)+,sr
  56.     rts
  57.  
  58. check_option:
  59.     movem.l    d0-a6,-(a7)
  60. ;    not.w    $ffff9800.w
  61. ;    not.w    $ffff8240.w
  62.     lea    $ffff9200.w,a0    ;extended port address (read only)
  63.     move.w    #$fff7,2(a0)    ;write mask
  64.     move.w    (a0),d0        ;read fire data
  65.     btst    #1,d0        ;check for option
  66.     bne.s    no_option    ;if set, option is not pressed
  67.     bsr    init_ripper
  68. no_option:
  69.     movem.l    (a7)+,d0-a6
  70.     rts
  71.  
  72.  
  73. init_ripper:
  74.     move.l    a7,old_stack+2
  75.     lea    rip_stack,a7
  76.     move.w    sr,-(a7)
  77.     move.w    #$2700,sr
  78.     clr.b    begin_ripping_flag
  79.     clr.b    new_config
  80.     bsr    save_screen_info
  81.     lea    cur_system_vars,a0
  82.     bsr    save_cur_system
  83.     bsr    restore_system
  84.  
  85.     clr.b    $fffffa07.w        ;iera
  86.     clr.b    $fffffa13.w        ;imra
  87.     move.b    #%01000000,$fffffa09.w    ;ierb
  88.     move.b    #%01000000,$fffffa15.w    ;imrb
  89.     move.l    #temp_vbl,$70.w
  90.     move.w    #$2300,sr
  91.     bsr    save_pal
  92.     bsr    wait_vbl
  93.     bsr    init_screen
  94.     bsr    init_ikbd
  95.     bsr    get_pic_info
  96.     bsr    print_ripper_menu_txt    
  97.     move.b    #3,$fffffc00.w
  98.     move.b    #$96,$fffffc00.w
  99. do_ripper_menu:
  100.     tst.b    key_table+$3b
  101.     bne    show_screen
  102.     tst.b    key_table+$3c
  103.     bne    do_save_videl_file
  104.     tst.b    key_table+$3d
  105.     bne    do_save_file
  106.     tst.b    key_table+$3e
  107.     bne    do_save_god_file
  108.     tst.b    key_table+$3f
  109.     bne    do_save_tga_file
  110.     tst.b    key_table+$44
  111.     beq.s    do_ripper_menu
  112.     bsr    restore_ikbd
  113.     bsr    wait_vbl
  114.     bsr    restore_screen_info    
  115.     bsr    restore_pal
  116.     move.w    #$2700,sr
  117.     lea    cur_system_vars,a0
  118.     bsr    restore_cur_system
  119.     tst.b    new_config
  120.     beq.s    .no_new
  121.     clr.b    check_bit
  122.     bsr    do_installation
  123.     move.b    #1,check_bit
  124. .no_new
  125.     move.w    (a7)+,sr
  126. old_stack
  127.     lea    $12345678,a7
  128.     rts
  129.  
  130. new_vbl:    bsr    check_option
  131. old_vbl:    jmp    ([$70.w])
  132.  
  133. temp_vbl:    addq.l    #1,$466.w
  134.         rte
  135.  
  136. print_ripper_menu_txt:
  137.  
  138.     lea    ripper_txt,a0
  139.     move.l    #320-25*3,d0
  140.     moveq    #0,d1
  141.     bsr    print_string
  142.  
  143.     lea    coder_txt,a0
  144.     move.l    #320-22*3,d0
  145.     moveq    #10,d1
  146.     bsr    print_string
  147.  
  148.     lea    rg_txt,a0
  149.     move.l    #320-29*3,d0
  150.     moveq    #20,d1
  151.     bsr    print_string
  152.  
  153.     lea    menu_txt,a0
  154.     moveq    #0,d0
  155.     moveq    #40,d1
  156.     bsr    print_string
  157.  
  158.     lea    variables_txt,a0
  159.     moveq    #0,d0
  160.     move.l    #vars_y,d1
  161.     bsr    print_string
  162.  
  163.     move.w    pic_res,d0
  164.     move.l    (res_txts,d0.w*4),a0
  165.     moveq    #6*6,d0
  166.     move.l    #vars_y,d1
  167.     bsr    print_string
  168.  
  169.  
  170.     lea    st_txt,a0
  171.     tst.w    pic_pal
  172.     beq.s    .stpal
  173.     lea    falcon_txt,a0
  174. .stpal    move.l    #45*6,d0
  175.     move.l    #vars_y,d1
  176.     bsr    print_string
  177.  
  178.     lea    word_txts,a6
  179. .loop1    move.l    (a6)+,a0
  180.     cmpa.l    #0,a0
  181.     beq.    .el1
  182.     moveq    #0,d0
  183.     move.w    (a0),d0
  184.     bsr    conv_long_ascii
  185.     lea    long_string+6,a0
  186.     moveq    #0,d0
  187.     move.w    (a6)+,d0
  188.     move.w    (a6)+,d1
  189.     mulu    #6,d1
  190.     add.l    #vars_y,d1
  191.     pea    (a6)
  192.     bsr    print_string
  193.     move.l    (a7)+,a6
  194.     bra.s    .loop1    
  195.  
  196. .el1    lea    byte_txts,a6
  197. .loop2    move.l    (a6)+,a0
  198.     cmpa.l    #0,a0
  199.     beq.    .el2
  200.     moveq    #0,d0
  201.     move.b    (a0),d0
  202.     bsr    conv_long_ascii
  203.     lea    long_string+6,a0
  204.     moveq    #0,d0
  205.     move.w    (a6)+,d0
  206.     move.w    (a6)+,d1
  207.     mulu    #6,d1
  208.     add.l    #vars_y,d1
  209.     pea    (a6)
  210.     bsr    print_string
  211.     move.l    (a7)+,a6
  212.     bra.s    .loop2
  213.  
  214. .el2    lea    screen_vars+4,a6
  215.     moveq    #7,d7
  216.     moveq    #6*5,d6
  217. .loop3    moveq    #0,d0
  218.     move.w    (a6)+,d0
  219.     bsr    conv_long_ascii
  220.     lea    long_string+6,a0
  221.     move.l    d6,d0
  222.     move.l    #vars_y+6*2,d1
  223.     movem.l    d6-7/a6,-(a7)
  224.     bsr    print_string
  225.     movem.l    (a7)+,d6-7/a6
  226.     add.l    #6*10,d6
  227.     dbra    d7,.loop3
  228.  
  229.     moveq    #5,d7
  230.     moveq    #6*5,d6
  231. .loop4    moveq    #0,d0
  232.     move.w    (a6)+,d0
  233.     bsr    conv_long_ascii
  234.     lea    long_string+6,a0
  235.     move.l    d6,d0
  236.     move.l    #vars_y+6*3,d1
  237.     movem.l    d6-7/a6,-(a7)
  238.     bsr    print_string
  239.     movem.l    (a7)+,d6-7/a6
  240.     add.l    #6*10,d6
  241.     dbra    d7,.loop4
  242.  
  243.     moveq    #0,d0
  244.     move.w    screen_vars+34,d0        
  245.     bsr    conv_long_ascii
  246.     lea    long_string+6,a0
  247.     move.l    d6,d0
  248.     move.l    #vars_y+6*3,d1
  249.     movem.l    d6-7/a6,-(a7)
  250.     bsr    print_string
  251.     movem.l    (a7)+,d6-7/a6
  252.     add.l    #6*10,d6
  253.  
  254.     moveq    #0,d0
  255.     move.w    screen_vars+38,d0        
  256.     bsr    conv_long_ascii
  257.     lea    long_string+6,a0
  258.     move.l    d6,d0
  259.     move.l    #vars_y+6*3,d1
  260.     movem.l    d6-7/a6,-(a7)
  261.     bsr    print_string
  262.     movem.l    (a7)+,d6-7/a6
  263.     add.l    #6*10,d6
  264.  
  265.     rts
  266.  
  267.  
  268. show_screen
  269.     bsr    wait_vbl
  270.     bsr    restore_screen_info    
  271.     bsr    restore_pic_pal
  272. .wt    tst.b    key_table+$3b
  273.     bne.s    .wt
  274. show_loop
  275.     tst.b    key_table+$48
  276.     beq.s    .not_up
  277.  
  278.     lea    screen_vars-1,a0
  279.     move.l    (a0),d0
  280.     move.l    screenline_length,d1
  281.     tst.b    key_table+$1D
  282.     beq.s    .nuc
  283.     move.l    screen_length,d1
  284. .wnot_up
  285.     tst.b    key_table+$48
  286.     bne.s    .wnot_up
  287. .nuc
  288.     sub.l    d1,d0
  289.     bmi.s    .not_up
  290.     move.l    d0,(a0)
  291.     bra    show_screen
  292.  
  293. .not_up
  294.     tst.b    key_table+$50
  295.     beq.s    .not_down
  296.  
  297.     lea    screen_vars-1,a0
  298.     move.l    (a0),d0
  299.     move.l    screenline_length,d1
  300.     tst.b    key_table+$1D
  301.     beq.s    .ndc
  302.     move.l    screen_length,d1
  303. .wnot_down
  304.     tst.b    key_table+$50
  305.     bne.s    .wnot_down
  306.  
  307. .ndc
  308.     add.l    d1,d0
  309.     add.l    screen_length,d0
  310.     cmp.l    mem_top,d0
  311.     bge    .not_up
  312.  
  313.     move.l    (a0),d0
  314.     add.l    d1,d0
  315.     move.l    d0,(a0)
  316.     bra    show_screen
  317.  
  318. .not_down
  319.     tst.b    key_table+$4B
  320.     beq.s    .not_left
  321.  
  322.     tst.b    key_table+$1D
  323.     beq.s    .nlc
  324. .wnot_left
  325.     tst.b    key_table+$4B
  326.     bne.s    .wnot_left
  327. .nlc
  328.  
  329.     lea    screen_vars-1,a0
  330.     move.l    (a0),d0
  331.     moveq    #2,d1
  332.     sub.l    d1,d0
  333.     bmi.s    .not_left
  334.     move.l    d0,(a0)
  335.     bra    show_screen
  336.  
  337. .not_left
  338.     tst.b    key_table+$4D
  339.     beq.s    .not_right
  340.  
  341.  
  342.     tst.b    key_table+$1D
  343.     beq.s    .nrc
  344. .wnot_right
  345.     tst.b    key_table+$4D
  346.     bne.s    .wnot_right
  347. .nrc
  348.  
  349.     lea    screen_vars-1,a0
  350.     move.l    (a0),d0
  351.     moveq    #2,d1
  352.     add.l    d1,d0
  353.     add.l    screen_length,d0
  354.     cmp.l    mem_top,d0
  355.     bge.s    .not_right
  356.     move.l    (a0),d0
  357.     add.l    d1,d0
  358.     move.l    d0,(a0)
  359.     bra    show_screen
  360.  
  361. .not_right
  362.     tst.b    key_table+$3c
  363.     bne.s    start_st_pal
  364.     tst.b    key_table+$3d
  365.     bne.s    start_falc_pal    
  366.     tst.b    key_table+$3b
  367.     beq    show_loop
  368.     
  369.  
  370.     bsr    wait_vbl
  371.     bsr    set_my_screen
  372.     bsr    set_resolution
  373.     bsr    set_my_pal
  374. .wt    tst.b    key_table+$3b
  375.     bne.s    .wt    
  376.     bra    do_ripper_menu
  377.  
  378. start_st_pal:
  379.     clr.w    pic_pal
  380.     bsr    restore_pic_pal
  381.     bsr    unset_falc_pal
  382. .wt    tst.b    key_table+$3c
  383.     beq    show_loop
  384.     bra.s    .wt
  385.  
  386. start_falc_pal:
  387.     move.w    #1,pic_pal
  388.     bsr    restore_pic_pal
  389.     bsr    unset_st_pal
  390. .wt    tst.b    key_table+$3d
  391.     beq    show_loop
  392.     bra.s    .wt
  393.  
  394. do_save_tga_file
  395.     move.b    #3,god_mode
  396.     bra.s    dosavefile
  397. do_save_videl_file
  398.     move.b    #2,god_mode
  399.     bra.s    dosavefile
  400. do_save_god_file
  401.     move.b    #1,god_mode
  402.     bra.s    dosavefile
  403. do_save_file
  404.     clr.b    god_mode
  405. dosavefile
  406.     lea    enter_file_txt,a0
  407.     moveq    #0,d0
  408.     move.l    #160,d1
  409.     bsr    print_string
  410.     
  411. .wt1    tst.b    key_table+$3c
  412.     bne.s    .wt1
  413.  
  414.     bsr    enter_file_name
  415.     bmi    .err
  416.     bsr    restore_system
  417.     bsr    save_file
  418. .err    bsr    clear_my_screen
  419.     bsr    print_ripper_menu_txt
  420.     bsr    init_ikbd
  421.     bra    do_ripper_menu
  422.  
  423.  
  424. get_pic_info:
  425.     move.l    #'GRIP',magic
  426.     lea    screen_vars(pc),a0
  427.     bfextu    (a0){0:24},d0
  428.     move.l    d0,pic_adr
  429.     move.l    d0,cur_pic_adr
  430.  
  431.     moveq    #0,d0
  432.     move.w    40(a0),d0        ;line length (words)
  433.     add.w    d0,d0            ;length in bytes
  434.     move.w    d0,line_length        ;save
  435.  
  436.     bsr    get_pic_res
  437.  
  438.     move.w    28(a0),d0        ;82AA - VDE
  439.     sub.w    26(a0),d0        ;82A8 - VDB
  440.     move.w    38(a0),d1        ;82C0 - VCO
  441.  
  442.     btst    #1,d1            ;interlace mode
  443.     bne.s    .nint            ;yes
  444.     lsr.w    d0
  445. .nint    btst    #0,d1            ;line doubling?
  446.     beq.s    .nol
  447.     lsr.w    d0    
  448. .nol    move.w    d0,pic_y        ;store y size
  449.     mulu    40(a0),d0        ;line_width*y lines
  450.     add.l    d0,d0            ;*2 file length in bytes
  451.     move.l    d0,pic_length
  452.  
  453.     moveq    #0,d0
  454.     move.w    40(a0),d0
  455.     add.w    42(a0),d0
  456.     add.w    d0,d0
  457.     move.l    d0,screenline_length
  458.     mulu    pic_y,d0
  459.     move.l    d0,screen_length
  460.     rts
  461.  
  462. get_pic_res:
  463.     move.b    44(a0),d0            ;8260
  464.     move.w    36(a0),d1            ;8266
  465.     btst    #10,d1
  466.     bne    .two_colour
  467.     btst    #8,d1
  468.     bne    .true_colour
  469.     btst    #4,d1
  470.     bne    .eight_colour
  471.     tst.b    d0
  472.     beq    .sixteen_colour
  473.     cmp.b    #1,d0
  474.     beq    .four_colour
  475. .two_colour    
  476.     clr.w    pic_res
  477.     move.w    40(a0),d0        ;8210 - line width (words)
  478.     lsl.w    #4,d0            ;*16
  479.     move.w    d0,pic_x        ;x pixels
  480.     rts
  481. .four_colour
  482.     moveq    #62,d0
  483.     tst.b    vga_flag
  484.     beq.s    .nvga
  485.     moveq    #23,d0
  486. .nvga    cmp.w    4(a0),d0        ;HHT
  487.     bne    .sixteen_colour
  488.     move.w    #1,pic_res
  489.     move.w    40(a0),d0        ;8210 - line width (words)
  490.     lsl.w    #3,d0            ;*16
  491.     move.w    d0,pic_x        ;x pixels
  492.     rts
  493. .sixteen_colour
  494.     move.w    #2,pic_res
  495.     move.w    40(a0),d0        ;8210 - line width (words)
  496.     lsl.w    #2,d0            ;*4
  497.     move.w    d0,pic_x        ;x pixels
  498.     rts
  499. .eight_colour
  500.     move.w    #3,pic_res
  501.     move.w    40(a0),d0        ;8210 - line width (words)
  502.     add.w    d0,d0            ;*2
  503.     move.w    d0,pic_x        ;x pixels
  504.     rts
  505. .true_colour
  506.     move.w    #4,pic_res
  507.     move.w    40(a0),pic_x
  508. .cont    rts
  509.  
  510.  
  511.  
  512. enter_file_name
  513.     clr.w    text_counter
  514.  
  515. .loop    clr.b    key_pressed
  516. .wk    tst.b    key_pressed
  517.     beq.s    .wk
  518.     move.b    current_key,d1
  519.     cmp.b    #$1c,d1
  520.     beq    .end_entry
  521.     cmp.b    #1,d1
  522.     beq    .quit_entry
  523.     cmp.b    #$e,d1
  524.     bne.s    .nback
  525.  
  526.     subq.w    #1,text_counter
  527.     bpl.s    .pls
  528.     clr.w    text_counter
  529. .pls    lea    single_string,a0
  530.     move.b    #' ',(a0)
  531.     move.w    text_counter,d0
  532.     mulu    #6,d0
  533.     move.l    #170,d1
  534.     bsr    print_string
  535.  
  536.     lea    file_name,a0
  537.     move.w    text_counter,d0
  538.     clr.b    (a0,d0.w)
  539.     bra    .loop
  540.  
  541. .nback    lea    single_string,a0
  542.     move.b    (scan_code_table,d1.w),d1
  543.     move.b    d1,(a0)
  544.     move.w    text_counter,d0
  545.     lea    file_name,a1
  546.     move.b    d1,(a1,d0.w)
  547.     mulu    #6,d0
  548.     move.l    #170,d1
  549.     bsr    print_string
  550.  
  551.     cmp.w    #640/6-1,text_counter
  552.     bge.s    .ge
  553.     addq.w    #1,text_counter
  554. .ge
  555.  
  556.     bra    .loop
  557.  
  558. .quit_entry
  559.     moveq    #-1,d0
  560.     rts
  561.  
  562. .end_entry
  563.     move.w    text_counter,d0
  564.     clr.b    (file_name+1,d0.w)
  565.     moveq    #0,d0
  566.     rts
  567.  
  568.  
  569. wait_vbl:
  570.     move.l    d0,-(a7)
  571.     move.l    $466.w,d0
  572. .wt    cmp.l    $466.w,d0
  573.     beq.s    .wt
  574.     move.l    (a7)+,d0
  575.     rts
  576.  
  577.  
  578. ************************
  579. * VECTOR SAVE ROUTINES *
  580. *************************
  581.  
  582. save_system:
  583.     move.l    $42e.w,mem_top
  584.     lea    old_system_vars(pc),a0    
  585. save_cur_system
  586.     move.w    sr,-(a7)
  587.     move.w    #$2700,sr
  588.     movec    cacr,d0
  589.     move.w    d0,(a0)+
  590.     movec    VBR,d0
  591.     move.l    d0,(a0)+
  592.     move.l    $68.w,(a0)+            ; hbl
  593.     move.l    $70.w,(a0)+            ; vbl
  594.     move.l    $84.w,(a0)+            ; trap #1
  595.     move.l    $b4.w,(a0)+            ; trap #13
  596.     move.l    $b8.w,(a0)+            ; trap #14
  597.     move.l    $110.w,(a0)+            ; Timer D
  598.     move.l    $114.w,(a0)+            ; Timer C
  599.     move.l    $118.w,(a0)+            ; ikbd
  600.     move.l    $120.w,(a0)+            ; Timer B
  601.     move.l    $134.w,(a0)+            ; Timer A
  602.     move.l    $13c.w,(a0)+            ; mono detect
  603.     move.l    $456.w,(a0)+            ; vbl list ptr
  604.     move.l    $466.w,(a0)+            ; current vbl clock
  605.     move.l    $502.w,(a0)+            ; alt-help vector
  606.  
  607.     move.w    $ffff8900.w,(a0)+                ; Interruptions, Son DMA
  608.     move.b    $ffff8903.w,(a0)+                ; Start - High
  609.     move.b    $ffff8905.w,(a0)+                ; Start - Med
  610.     move.b    $ffff8907.w,(a0)+                ; Start - Low
  611.     move.b    $ffff890f.w,(a0)+                ; End - High
  612.     move.b    $ffff8911.w,(a0)+                ; End - Med
  613.     move.b    $ffff8913.w,(a0)+                ; End - Low
  614.     move.w    $ffff8920.w,(a0)+                ; Nb Voies, 8/16, Mono/Stereo
  615.     move.w    $ffff8930.w,(a0)+                ; Matrice : Sources
  616.     move.w    $ffff8932.w,(a0)+                ; Matrice : Destinations
  617.     move.w    $ffff8934.w,(a0)+                ; Prescales d'horloge
  618.     move.w    $ffff8936.w,(a0)+                ; Nb Voies Record,source ADDERIN
  619.     move.w    $ffff8938.w,(a0)+                ; Source ADC + Volumes entrĂ©es
  620.     move.w    $ffff893a.w,(a0)+                ; Volumes de Sortie
  621.  
  622.  
  623.     move.b    $fffffa07.w,(a0)+        ; iera
  624.     move.b    $fffffa09.w,(a0)+        ; ierb
  625.     move.b    $fffffa13.w,(a0)+        ; imra
  626.     move.b    $fffffa15.w,(a0)+        ; imrb
  627.     move.b    $fffffa17.w,(a0)+        ; vectore register
  628.     move.b    $fffffa19.w,(a0)+        ; Timer A control
  629.     move.b    $fffffa1b.w,(a0)+        ; Timer B control
  630.     move.b    $fffffa1d.w,(a0)+        ; Timer C & D control
  631.     move.b    $fffffa1f.w,(a0)+        ; Timer A data
  632.     move.b    $fffffa21.w,(a0)+        ; Timer B data
  633. ;    move.b    $fffffa23.w,(a0)+        ; Timer C data
  634.     move.b    $fffffa25.w,(a0)+        ; Timer D data
  635.     move.b    $ffff8007.w,(a0)+        ; 68030 Configuration 
  636.     move.w    (a7)+,sr
  637.     rts
  638.  
  639.  
  640. save_screen_info
  641.     lea    screen_vars(pc),a0
  642.     clr.w    -2(a0)
  643.  
  644.     move.b    $ffff8201.w,(a0)+    ; 0 Screen Adr (high)
  645.     move.b    $ffff8203.w,(a0)+    ; 1 Screen Adr (medium)
  646.     move.b    $ffff820d.w,(a0)+    ; 2 Screen Adr (low)
  647.     move.b    $ffff8265.w,(a0)+    ; 3 Horizontal Scroll
  648.  
  649.     move.w    $ffff8282.w,(a0)+    ; 4 Horizontal Hold Timer
  650.     move.w    $ffff8284.w,(a0)+    ; 6 Horizontal Border Begin
  651.     move.w    $ffff8286.w,(a0)+    ; 8 Horizontal Border End
  652.     move.w    $ffff8288.w,(a0)+    ;10 Horizontal Display Begin
  653.     move.w    $ffff828a.w,(a0)+    ;12 Horizontal display End 
  654.     move.w    $ffff828c.w,(a0)+    ;14 HSS-Synchro
  655.     move.w    $ffff828e.w,(a0)+    ;16 HFS
  656.     move.w    $ffff8290.w,(a0)+    ;18 HEE
  657.     move.w    $ffff82a2.w,(a0)+    ;20 Vertical Frequency Timer
  658.     move.w    $ffff82a4.w,(a0)+    ;22 Vertical Border Begin
  659.     move.w    $ffff82a6.w,(a0)+    ;24 Vertical Border End
  660.     move.w    $ffff82a8.w,(a0)+    ;26 Vertical Display Begin
  661.     move.w    $ffff82aa.w,(a0)+    ;28 Vertical Display End
  662.     move.w    $ffff82ac.w,(a0)+    ;30 VSS
  663.     move.w    $ffff820a.w,(a0)+    ;32 Video Sync Mode
  664.     move.w    $ffff82c0.w,(a0)+    ;34 Video Clock
  665.     move.w    $ffff8266.w,(a0)+    ;36 SPSHIFT - Falcon res
  666.     move.w    $ffff82c2.w,(a0)+    ;38 Video Control
  667.     move.w    $ffff8210.w,(a0)+    ;40 Falcon Line Width
  668.     move.w    $ffff820e.w,(a0)+    ;42 STe Line Width
  669.     move.b    $ffff8260.w,(a0)+    ;44 ST Resolution
  670.  
  671.     clr.b    (a0)            ;st flag    
  672.     move.l    a0,-(a7)
  673.     bsr    get_pic_info
  674.     move.l    (a7)+,a0
  675.  
  676.     move.w    pic_res,d0
  677.     jmp    ([st_check_rout,d0.w*4])
  678.  
  679. st_check_rout    dc.l    mono_st_check
  680.         dc.l    four_st_check
  681.         dc.l    sixteen_st_check
  682.         dc.l    non_st_check
  683.         dc.l    non_st_check
  684. mono_st_check
  685. non_st_check    
  686.     move.w    #1,pic_pal
  687.     rts
  688.  
  689. four_st_check
  690. ;    cmp.w    #640,pic_x
  691. ;    bne    non_st_check
  692. ;    cmp.w    #200,pic_y
  693. ;    bne    non_st_check
  694.     cmp.b    #1,-1(a0)
  695.     bne    non_st_check
  696.     st.b    (a0)
  697.     clr.w    pic_pal
  698.     rts
  699.  
  700. sixteen_st_check
  701.     cmp.w    #320,pic_x
  702.     bne    non_st_check
  703.     cmp.w    #200,pic_y
  704.     bne    non_st_check
  705.     st.b    (a0)
  706.     clr.w    pic_pal
  707.     rts
  708.  
  709.  
  710.  
  711. save_pal:
  712.     bsr    wait_vbl
  713.     lea    pal_space,a0
  714.     lea    $ffff8240.w,a1
  715.     moveq    #15,d0
  716. .save_st_pal
  717.     move.w    (a1)+,(a0)+
  718.     dbra    d0,.save_st_pal
  719.  
  720.     lea    $ffff9800.w,a1
  721.     move.w    #255,d0
  722. .save_falc_pal
  723.     move.l    (a1)+,(a0)+
  724.     dbra    d0,.save_falc_pal
  725.  
  726.  
  727.     rts
  728.  
  729. ***************************
  730. * SCREEN SETTING ROUTINES *
  731. ***************************
  732.  
  733.     clr.b    $ffff8265.w            ; Horizontal scroll reg=0
  734.     clr.w    $ffff820e.w
  735.  
  736.     lea    videl_640_200_2(pc),a0
  737.  
  738.     move.b    #2,$ffff820a.w            ; Internal sync
  739.     clr.b    $ffff8265.w            ; Horizontal scroll reg=0
  740.     addq.l    #4,a0                ; skip screen_length
  741.     move.w    (a0)+,$ffff820e.w        ; line width
  742.     move.w    (a0)+,$ffff8210.w        ; Falcon line width
  743.     move.w    (a0)+,d0            ; Resolution ST
  744.     move.w    (a0)+,d1            ; Resolution FALCON
  745.  
  746.     move.w    d1,$ffff8266.w            ; Resolution FALCON
  747.     tst.w    (a0)+                ; falcon screen mode?
  748.     beq.s    FalconRez            ; yes
  749.     move.b    d0,$ffff8260.w            ; Resolution ST
  750.     move.w    -8(a0),$ffff8210.w        ; Fa;cpm line width
  751. FalconRez
  752. ;    move.b    $ffff8007.w,d0
  753. ;    and.b    #%11,d0
  754. ;    cmp.b    #%10,d0
  755. ;    bne.s    R_OK                ; not VGA    
  756. ;    btst.b    #7,$ffff8006.w            ; VGA monitor ?
  757. ;    Beq.s    R_Ok                ; no, rgb
  758. ;    tst.b    vga_flag
  759. ;    beq.s    R_Ok
  760.     adda.w    #16*2,a0            ; get to VGA data
  761. R_Ok
  762.     move.w    (a0)+,$ffff8282.w        ; HHT - Hold counter
  763.     move.w    (a0)+,$ffff8284.w        ; HBB - Border Begin
  764.     move.w    (a0)+,$ffff8286.w        ; HBE - Border end
  765.     move.w    (a0)+,$ffff8288.w        ; HDB - Display Begin
  766.     move.w    (a0)+,$ffff828a.w        ; HDE - Display End
  767.     move.w    (a0)+,$ffff828c.w        ; HSS - Synchro
  768.     move.w    (a0)+,$ffff828e.w        ; HFS
  769.     move.w    (a0)+,$ffff8290.w        ; HEE
  770.     move.w    (a0)+,$ffff82a2.w        ; VFT - Synchro
  771.     move.w    (a0)+,$ffff82a4.w        ; VBB - Border Begin
  772.     move.w    (a0)+,$ffff82a6.w        ; VBE - Border End
  773.     move.w    (a0)+,$ffff82a8.w        ; VDB - Display Begin
  774.     move.w    (a0)+,$ffff82aa.w        ; VDE - Display End
  775.     move.w    (a0)+,$ffff82ac.w        ; VSS-Synchro
  776.     move.w    (a0)+,$ffff82c0.w        ; FALCON resoultion indicator
  777.     move.w    (a0),$ffff82c2.w        ; resolution info
  778.  
  779.     rts
  780.  
  781. set_resolution:
  782.     clr.b    $ffff8265.w            ; Horizontal scroll reg=0
  783.     clr.w    $ffff820e.w
  784.  
  785.     tst.b    vga_flag
  786.     beq    set_res_rgb
  787. set_res_vga:
  788.         MOVE.L   #$C6008E,$FFFF8282.W
  789.         MOVE.L   #$160274,$FFFF8286.W
  790.         MOVE.L   #$4D0096,$FFFF828A.W
  791.         MOVE.L   #$41903B9,$FFFF82A2.W
  792.         MOVE.L   #$990099,$FFFF82A6.W
  793.         MOVE.L   #$3B90415,$FFFF82AA.W
  794.         MOVE.W   #$200,$FFFF820A.W
  795.         MOVE.W   #$186,$FFFF82C0.W
  796.         CLR.W    $FFFF8266.W
  797.         MOVE.W   #$400,$FFFF8266.W
  798.         MOVE.W   #$9,$FFFF82C2.W
  799.         MOVE.W   #$28,$FFFF8210.W
  800.     rts
  801.  
  802. set_res_rgb:
  803.         MOVE.L   #$1FE0199,$FFFF8282.W
  804.         MOVE.L   #$5003ED,$FFFF8286.W
  805.         MOVE.L   #$9E01B2,$FFFF828A.W
  806.         MOVE.L   #$2710265,$FFFF82A2.W
  807.         MOVE.L   #$2F007F,$FFFF82A6.W
  808.         MOVE.L   #$20F026B,$FFFF82AA.W
  809.         MOVE.W   #$200,$FFFF820A.W
  810.         MOVE.W   #$182,$FFFF82C0.W
  811.         CLR.W    $FFFF8266.W
  812.         MOVE.W   #$400,$FFFF8266.W
  813.         MOVE.W   #$4,$FFFF82C2.W
  814.         MOVE.W   #$28,$FFFF8210.W
  815.     rts
  816.  
  817.         MOVE.L   #$1FE0128,$FFFF8282.W
  818.         MOVE.L   #$A803F5,$FFFF8286.W
  819.         MOVE.L   #$A601C5,$FFFF828A.W
  820.         MOVE.L   #$24501DF,$FFFF82A2.W
  821.         MOVE.L   #$4F004F,$FFFF82A6.W
  822.         MOVE.L   #$1DF0237,$FFFF82AA.W
  823.         MOVE.W   #$200,$FFFF820A.W
  824.         MOVE.W   #$186,$FFFF82C0.W
  825.         CLR.W    $FFFF8266.W
  826.         MOVE.W   #$400,$FFFF8266.W
  827.         MOVE.W   #$4,$FFFF82C2.W
  828.         MOVE.W   #$28,$FFFF8210.W
  829.     rts
  830.     
  831. init_screen:
  832.     lea    screen_space(pc),a0
  833.     move.l    a0,d0
  834.     clr.b    d0
  835.     lea    physic(pc),a1
  836.     move.l    d0,(a1)
  837.     bsr    wait_vbl
  838.     bsr    set_my_screen
  839.     bsr    set_resolution
  840.     bsr    clear_my_screen
  841.     bsr    set_my_pal
  842.     rts
  843.  
  844. set_my_screen:
  845.     lea    physic(pc),a1
  846.     movea.w    #$8201,a0    ;$fffff8201=screen address
  847.     move.b    1(a1),(a0)
  848.     move.b    2(a1),2(a0)    ;$fffff8203
  849.     move.b    3(a1),$C(a0)    ;$fffff820d
  850.     rts
  851.  
  852.     
  853. clear_my_screen
  854.     move.l    physic(pc),a1
  855.     move.l    #(640*200/8)/4-1,d0
  856. .cl    clr.l    (a1)+
  857.     dbra    d0,.cl
  858.     rts
  859.  
  860. set_my_pal:
  861.     lea    $ffff9800.w,a0
  862.     lea    $ffff8240.w,a1
  863.     moveq    #0,d0
  864.     move.l    d0,(a0)+
  865.     move.w    d0,(a1)+
  866.     moveq    #-1,d0
  867.     move.l    d0,(a0)+
  868.     move.w    d0,(a1)+
  869.     rts
  870.  
  871. ***************************
  872. * VECTOR RESTORE ROUTINES *
  873. ***************************
  874.  
  875. restore_system:
  876.     lea    old_system_vars(pc),a0    
  877. restore_cur_system:
  878.     move.w    sr,-(a7)
  879.     move.w    #$2700,sr
  880.     move.w    (a0)+,d0
  881.     movec    d0,cacr
  882.     move.l    (a0)+,d0
  883.     movec    d0,VBR
  884.     move.l    (a0)+,$68.w            ; hbl
  885.     move.l    (a0)+,$70.w            ; vbl
  886.     move.l    (a0)+,$84.w            ; trap #1
  887.     move.l    (a0)+,$b4.w            ; trap #13
  888.     move.l    (a0)+,$b8.w            ; trap #14
  889.     move.l    (a0)+,$110.w            ; Timer D
  890.     move.l    (a0)+,$114.w            ; Timer C
  891.     move.l    (a0)+,$118.w            ; ikbd
  892.     move.l    (a0)+,$120.w            ; Timer B
  893.     move.l    (a0)+,$134.w            ; Timer A
  894.     move.l    (a0)+,$13c.w            ; mono detect
  895.     move.l    (a0)+,$456.w            ; vbl list ptr
  896.     move.l    (a0)+,$466.w            ; current vbl clock
  897.     move.l    (a0)+,$502.w            ; alt-help vector
  898.  
  899.     move.w    (a0)+,$ffff8900.w                ; Interruptions, Son DMA
  900.     move.b    (a0)+,$ffff8903.w                ; Start - High
  901.     move.b    (a0)+,$ffff8905.w                ; Start - Med
  902.     move.b    (a0)+,$ffff8907.w                ; Start - Low
  903.     move.b    (a0)+,$ffff890f.w                ; End - High
  904.     move.b    (a0)+,$ffff8911.w                ; End - Med
  905.     move.b    (a0)+,$ffff8913.w                ; End - Low
  906.     move.w    (a0)+,$ffff8920.w                ; Nb Voies, 8/16, Mono/Stereo
  907.     move.w    (a0)+,$ffff8930.w                ; Matrice : Sources
  908.     move.w    (a0)+,$ffff8932.w                ; Matrice : Destinations
  909.     move.w    (a0)+,$ffff8934.w                ; Prescales d'horloge
  910.     move.w    (a0)+,$ffff8936.w                ; Nb Voies Record,source ADDERIN
  911.     move.w    (a0)+,$ffff8938.w                ; Source ADC + Volumes entrĂ©es
  912.     move.w    (a0)+,$ffff893a.w                ; Volumes de Sortie
  913.  
  914.  
  915.     move.b    (a0)+,$fffffa07.w        ; iera
  916.     move.b    (a0)+,$fffffa09.w        ; ierb
  917.     move.b    (a0)+,$fffffa13.w        ; imra
  918.     move.b    (a0)+,$fffffa15.w        ; imrb
  919.     move.b    (a0)+,$fffffa17.w        ; vectore register
  920.     move.b    (a0)+,$fffffa19.w        ; Timer A control
  921.     move.b    (a0)+,$fffffa1b.w        ; Timer B control
  922.     move.b    (a0)+,$fffffa1d.w        ; Timer C & D control
  923.     move.b    (a0)+,$fffffa1f.w        ; Timer A data
  924.     move.b    (a0)+,$fffffa21.w        ; Timer B data
  925. ;    move.b    (a0)+,$fffffa23.w        ; Timer C data
  926.     move.b    (a0)+,$fffffa25.w        ; Timer D data
  927.     move.b    (a0)+,$ffff8007.w        ; 68030 Configuration 
  928.     move.w    (a7)+,sr
  929.     rts
  930.  
  931.  
  932. restore_screen_info:
  933.     lea    screen_vars(pc),a0
  934.     move.b    (a0)+,$ffff8201.w    ; 0 Screen Adr (high)
  935.     move.b    (a0)+,$ffff8203.w    ; 1 Screen Adr (medium)
  936.     move.b    (a0)+,$ffff820d.w    ; 2 Screen Adr (low)
  937.     move.b    (a0)+,$ffff8265.w    ; 3 Horizontal Scroll
  938.  
  939.     move.w    (a0)+,$ffff8282.w    ; 4 Horizontal Hold Timer
  940.     move.w    (a0)+,$ffff8284.w    ; 6 Horizontal Border Begin
  941.     move.w    (a0)+,$ffff8286.w    ; 8 Horizontal Border End
  942.     move.w    (a0)+,$ffff8288.w    ;10 Horizontal Display Begin
  943.     move.w    (a0)+,$ffff828a.w    ;12 Horizontal display End 
  944.     move.w    (a0)+,$ffff828c.w    ;14 HSS-Synchro
  945.     move.w    (a0)+,$ffff828e.w    ;16 HFS
  946.     move.w    (a0)+,$ffff8290.w    ;18 HEE
  947.     move.w    (a0)+,$ffff82a2.w    ;20 Vertical Frequency Timer
  948.     move.w    (a0)+,$ffff82a4.w    ;22 Vertical Border Begin
  949.     move.w    (a0)+,$ffff82a6.w    ;24 Vertical Border End
  950.     move.w    (a0)+,$ffff82a8.w    ;26 Vertical Display Begin
  951.     move.w    (a0)+,$ffff82aa.w    ;28 Vertical Display End
  952.     move.w    (a0)+,$ffff82ac.w    ;30 VSS
  953.     move.w    (a0)+,$ffff820a.w    ;32 Video Sync Mode
  954.     move.w    (a0)+,$ffff82c0.w    ;34 Video Clock
  955.     move.w    (a0)+,$ffff8266.w    ;36 SPSHIFT - Falcon res
  956.     tst.b    7(a0)
  957.     beq.s    .no_st
  958.     move.b    6(a0),$ffff8260.w
  959. .no_st
  960.     move.w    (a0)+,$ffff82c2.w    ;38 Video Control
  961.     move.w    (a0)+,$ffff8210.w    ;40 Falcon Line Width
  962.     move.w    (a0)+,$ffff820e.w    ;42 STe Line Width
  963.     rts
  964.  
  965.  
  966. restore_pic_pal
  967.     bsr    wait_vbl
  968.     tst.w    pic_pal
  969.     beq    restore_st_pal
  970.     bra    restore_falc_pal
  971.  
  972. restore_pal
  973.     bsr    wait_vbl
  974.     bsr    restore_st_pal
  975.     bsr    restore_falc_pal
  976.     rts
  977.  
  978. restore_st_pal
  979.     lea    pal_space,a0
  980.     lea    $ffff8240.w,a1
  981.     moveq    #15,d0
  982. .save_st_pal
  983.     move.w    (a0)+,(a1)+
  984.     dbra    d0,.save_st_pal
  985.     rts
  986.  
  987. unset_st_pal
  988.     lea    $ffff8240.w,a0
  989.     moveq    #0,d0
  990.     moveq    #7,d1
  991. .uns    move.l    d0,(a0)+
  992.     dbra    d1,.uns
  993.     rts
  994.  
  995. restore_falc_pal
  996.     lea    pal_space+32,a0
  997.     lea    $ffff9800.w,a1
  998.     move.w    #255,d0
  999. .save_falc_pal
  1000.     move.l    (a0)+,(a1)+
  1001.     dbra    d0,.save_falc_pal
  1002.     rts
  1003.  
  1004. unset_falc_pal
  1005.     lea    $ffff9800.w,a0
  1006.     moveq    #0,d0
  1007.     move.w    #255,d1
  1008. .uns    move.l    d0,(a0)+
  1009.     dbra    d1,.uns
  1010.     rts
  1011.  
  1012.  *-------------------*
  1013. ** KEYBOARD ROUTINES **
  1014.  *-------------------*
  1015.  
  1016.  
  1017. init_ikbd:    bsr    clear_ikbd
  1018.         moveq    #$11,d0
  1019.         bsr    send_ikbd
  1020.         move.l    $118.w,old118
  1021.         move.l    #my_ikbd,$118.w
  1022.         lea    key_table,a0
  1023.         moveq    #127,d0
  1024. .cl        clr.b    (a0)+
  1025.         dbra    d0,.cl
  1026.         rts
  1027.  
  1028. restore_ikbd:    bsr    clear_ikbd
  1029.         move.l    old118,$118.w
  1030.         rts
  1031.  
  1032. clear_ikbd:     btst    #0,$fffffc00.w        ;is ikbd data reg full?
  1033.                 beq.s   ikbd_ok            ;its empty so end
  1034.                 move.b  $fffffc02.w,D0        ;get ikbd data
  1035.                 bra.s   clear_ikbd        ;loop
  1036. ikbd_ok:        rts                             ;return
  1037.  
  1038. send_ikbd:      lea     $fffffc00.w,a0        ;ikbd control register
  1039. waitkeyready:   btst    #1,(a0)            ;is data reg empty?
  1040.                 beq.s   waitkeyready        ;no, wait for empty
  1041.                 move.b  d0,2(a0)        ;write to ikbd data reg
  1042.                 rts                             ;return
  1043.  
  1044. my_ikbd:    move.w    #$2500,sr        ;set ipl level
  1045.  
  1046.         movem.l    d0/a0-a1,-(a7)        ;save registers
  1047.         movea.w    #$fffffc00,a0        ;ikbd control registers
  1048.  
  1049.         move.b    (a0),d0            ;read control reg
  1050.         btst    #7,d0            ;int request?
  1051.         beq    endmykey        ;no
  1052.  
  1053. keyloop        moveq    #0,d0            ;clear d0
  1054.         move.b    2(a0),d0        ;read ikbd data
  1055.         tst.b    key_cntr        ;is this first byte
  1056.         beq    chk_head        ;yes, so check for header
  1057.         
  1058.         move.l    key_ptr(pc),a1        ;ptr into key storage area
  1059.         move.b    d0,(a1)+        ;store keyboard data
  1060.         move.l    a1,key_ptr        ;update ptr
  1061.         subq.b    #1,key_cntr        ;decrement data to get
  1062.         bne    last_key_check        ;more data to get
  1063.  
  1064. process_packet:
  1065.         lea    key_buffer,a1        ;start of key storage data
  1066.         moveq    #0,d0            ;clear d0
  1067.         move.b    (a1),d0            ;get first byte
  1068.         sub.l    #$f6,d0        ;minus default packet header value
  1069.         and.w    #$f,d0            ;mask off unwanted bits
  1070.         cmp.w    #10,d0            ;is it a valid packet
  1071.         bge.s    .noj            ;no
  1072.         jsr    ([key_handlers,d0.w*4])    ;jump to packet handler routine
  1073. .noj        bra    last_key_check        ;check for more key data
  1074.  
  1075. chk_head    cmp.w    #$f6,d0            ;is it packer header
  1076.         blt.s    store_key        ;no, store as a key
  1077.  
  1078.         move.b    d0,key_buffer        ;store packet header
  1079.         move.l    #key_buffer+1,key_ptr    ;init key pointer
  1080.         lea    packet_table,a1        ;packet table
  1081.         sub.b    #$f6,d0            ;d0 is offset
  1082.         move.b    (a1,d0.w),key_cntr    ;bytes of data to be read
  1083.         bra    last_key_check        ;get data
  1084.  
  1085. store_key
  1086. ;        IFNE    DEBUG
  1087. ;        movem.l    d0-a6,-(a7)
  1088. ;        lea    $f96.w,a0
  1089. ;        jsr    ([$1132.w])
  1090. ;        movem.l    (a7)+,d0-a6
  1091. ;        ENDC
  1092.         lea    key_table,a1        ;keypress table
  1093.         bclr    #7,d0            ;check 'release' bit
  1094.         beq.s    setkey            ;0, so set key press
  1095.         clr.b    (a1,d0.w)        ;key released
  1096.         bra.s    last_key_check        ;get key data
  1097. setkey        st.b    (a1,d0.w)        ;set key pressed
  1098.         st.b    key_pressed
  1099.         move.b    d0,current_key
  1100.  
  1101. last_key_check:    move.b    (a0),d0        ;read ikbd control
  1102.         btst    #0,d0        ;more data to read?
  1103.         bne    keyloop        ;yes, so process it
  1104. endmykey    movem.l    (a7)+,d0/a0-1    ;restore registers
  1105.         bclr    #6,$fffffa11.w    ;signal end of ikbd interrupt
  1106.         rte
  1107.  
  1108. packet_table:
  1109.         dc.b    1    ;$f6 - keyboard packet
  1110.         dc.b    5    ;$f7 - absolute mouse packet
  1111.         dc.b    2    ;$f8 - relative mouse position / no buttons
  1112.         dc.b    2    ;$f9 - relative mouse / left button
  1113.         dc.b    2    ;$fa - relative mouse / right button
  1114.         dc.b    2    ;$fb - relative mouse / both buttons
  1115.         dc.b    6    ;$fc - time of day
  1116.         dc.b    2    ;$fd - joystick report
  1117.         dc.b    1    ;$fe - joystick 0 event
  1118.         dc.b    1    ;$ff - joystick 1 event
  1119.         even
  1120.  
  1121. key_handlers:
  1122.         dc.l    keyboard_packet_handler    ;$f6
  1123.         dc.l    absolute_mouse_handler    ;$f7
  1124.         dc.l    relative_mouse_handler    ;$f8
  1125.         dc.l    relative_mouse_handler    ;$f9
  1126.         dc.l    relative_mouse_handler    ;$fa
  1127.         dc.l    relative_mouse_handler    ;$fb
  1128.         dc.l    time_of_day_handler    ;$fc
  1129.         dc.l    joystick_report_handler    ;$fd
  1130.         dc.l    joystick0_handler    ;$fe
  1131.         dc.l    joystick1_handler    ;$ff
  1132.  
  1133. keyboard_packet_handler:
  1134.         moveq    #0,d0            ;clear d0
  1135.         move.b    1(a0),d0        ;get key
  1136.         bclr    #7,d0            ;key pressed?
  1137.         beq.s    .setkey            ;yes, set it
  1138.         clr.b    (key_table,d0.w)    ;indicate key release
  1139.         rts                             ;return
  1140. .setkey        st.b    (key_table,d0.w)    ;clear key
  1141.         st.b    key_pressed
  1142.         move.b    d0,current_key
  1143.         rts                             ;return
  1144.  
  1145. absolute_mouse_handler:            ;no absolute mouse handler!
  1146. time_of_day_handler:            ;no time of day handler!
  1147. joystick_report_handler:
  1148.         move.b    1(a1),j1_packet        ;get joystick 1 packet
  1149.         move.b    2(a1),j2_packet        ;get joystick 2 packet
  1150.         rts                             ;return
  1151.  
  1152. joystick0_handler:
  1153.         move.b    1(a1),j1_packet        ;save joystick 1 packet
  1154.         rts                             ;return
  1155.  
  1156. joystick1_handler:
  1157.         move.b    1(a1),j2_packet        ;save joystick 2 packet
  1158.         rts                             ;return
  1159.  
  1160. relative_mouse_handler:
  1161.         st.b    mouse_moved        ;indicate mouse moved
  1162.  
  1163.         move.b    (a1),d0            ;get mouse key info
  1164.         and.w    #%11,d0            ;isolate l+r buttons
  1165.         move.b    d0,mousek        ;save mouse key info
  1166.  
  1167. .nolimits    move.b    1(a1),d0        ;mouse x movement
  1168.         ext.w    d0            ;extend to signed word
  1169.         add.w    d0,mousex        ;update mouse x position
  1170.         move.b    2(a1),d0        ;mouse y movement
  1171.         ext.w    d0            ;extedn to signed word
  1172.         add.w    d0,mousey        ;update mouse y position
  1173. ;        rts                             ;return
  1174.  
  1175.         move.w    mousex,d0
  1176.         cmp.w    mousex_min,d0
  1177.         bgt.s    .xok1
  1178.         move.w    mousex_min,mousex
  1179.         bra.s    .xok2
  1180. .xok1        cmp.w    mousex_max,d0
  1181.         blt.s    .xok2
  1182.         move.w    mousex_max,mousex
  1183. .xok2        move.w    mousey,d0
  1184.         cmp.w    mousey_min,d0
  1185.         bgt.s    .yok1
  1186.         move.w    mousey_min,mousey
  1187.         bra.s    .yok2
  1188. .yok1        cmp.w    mousey_max,d0
  1189.         blt.s    .yok2
  1190.         move.w    mousey_max,mousey
  1191. .yok2        rts
  1192.  
  1193.  
  1194. ***************************************
  1195. * STRING PRINTING/CONVERSION ROUTINES *
  1196. ***************************************
  1197.  
  1198. print_string
  1199.     move.l    physic(pc),a1        ;screen
  1200.     mulu    #80,d1            ;y line * line size
  1201.     add.l    d1,a1            ;get to y line
  1202.     lea    tiny_font(pc),a2    ;font data
  1203. .line    move.l    d0,d2            ;start x
  1204. .nxt    moveq    #0,d1            ;clear d1
  1205.     move.b    (a0)+,d1        ;get byte from string
  1206.     beq    .last
  1207.     cmp.b    #13,d1            ;return?
  1208.     bne.s    .not_return        ;no
  1209.     add.l    #80*8*6,d0        ;next line
  1210.     bra.s    .line            ;restore x pos
  1211. .not_return
  1212.     sub.b    #32,d1        ;- first char
  1213.     mulu    #36,d1        ;* char size
  1214.     moveq    #5,d4        ;6 y lines
  1215. .yl    bfextu    (a2){d1:6},d3    
  1216.     bfins    d3,(a1){d2:6}
  1217.     addq.l    #6,d1        ;next char pos in char
  1218.     add.l    #80*8,d2    ;next screen line
  1219.     dbra    d4,.yl        ;loop y times
  1220.     sub.l    #80*8*6-6,d2    ;next x pos
  1221.     bra.s    .nxt
  1222. .last    rts
  1223.  
  1224. * enter with d0=long value
  1225.  
  1226. conv_long_ascii:
  1227.     movem.l    d0-3/a0,-(a7)
  1228.     lea    long_string,a0
  1229.     moveq    #$20,d2
  1230.     moveq    #9,d1
  1231. .clr    move.b    d2,(a0)+
  1232.     dbra    d1,.clr    
  1233.     clr.b    (a0)
  1234.     tst.l    d0
  1235.     beq.s    .endc
  1236.     moveq    #10,d2
  1237.     moveq    #$30,d3    
  1238. .conv    divul.l    d2,d1:d0
  1239.     add.b    d3,d1
  1240.     move.b    d1,-(a0)
  1241.     cmp.w    d2,d0
  1242.     bcc.s    .conv
  1243.     tst.b    d0
  1244.     beq.s    .endc
  1245.     add.b    d3,d0
  1246.     move.b    d0,-(a0)
  1247. .endc    movem.l    (a7)+,d0-3/a0
  1248.     rts
  1249.  
  1250.  *------------------------*
  1251. ** GEMDOS Disk Operations **
  1252.  *------------------------*
  1253.  
  1254. * A0->filename, A1->address, D1=length
  1255.  
  1256.  
  1257. save_file:
  1258.         move.l    pic_adr,cur_pic_adr
  1259.         cmp.b    #1,god_mode
  1260.         beq    save_god_file
  1261.         cmp.b    #2,god_mode
  1262.         beq    save_videl_file
  1263.         cmp.b    #3,god_mode
  1264.         beq    save_tga_file
  1265.         lea    file_name(pc),a0
  1266.         bsr    create_file
  1267.         bmi    display_gemdos_error
  1268.         lea    magic,a0
  1269.         moveq    #16,d7
  1270.         bsr    write_file
  1271.         bmi    display_gemdos_error        
  1272.         move.w    pic_res,d0
  1273.         lea    st_pal_sizes,a1
  1274.         lea    pal_space,a0
  1275.         tst.w    pic_pal
  1276.         beq.s    .st_pal
  1277.         lea    falc_pal_sizes,a1
  1278.         lea    pal_space+32,a0
  1279. .st_pal        move.l    (a1,d0.w*4),d7
  1280.         beq.s    .no_pal
  1281.         bsr    write_file
  1282.         bmi    display_gemdos_error
  1283. .no_pal
  1284.  
  1285. save_true
  1286.         tst.w    screen_vars+42
  1287.         bne    save_pic_lines
  1288.         move.l    pic_adr,a0
  1289.         move.l    pic_length,d7
  1290.         bsr    write_file
  1291.         bmi    display_gemdos_error
  1292.         bsr    close_file
  1293.         rts
  1294. save_pic_lines
  1295.         move.l    pic_adr,a0
  1296.         moveq    #0,d7
  1297.         move.w    screen_vars+40,d7
  1298.         move.l    d7,d6
  1299.         add.w    screen_vars+42,d6
  1300.         add.l    d7,d7
  1301.         add.l    d6,d6
  1302.         
  1303.         move.w    pic_y,d5
  1304.         subq.w    #1,d5
  1305.         bmi.s    .err
  1306. .lines        bsr    write_file
  1307.         add.l    d6,a0
  1308.         dbra    d5,.lines
  1309.  
  1310. .err        bsr    close_file
  1311.         rts
  1312.  
  1313.  
  1314. save_true_tga:
  1315.         
  1316.         move.w    pic_y,d1
  1317.         subq.w    #1,d1
  1318. .y_loop:    move.w    pic_x,d0
  1319.         subq.w    #1,d0
  1320.  
  1321.         move.l    cur_pic_adr,a0
  1322.         move.l    physic(pc),a1
  1323.  
  1324. .copy_x:    move.w    (a0)+,(a1)+
  1325.         dbra    d0,.copy_x        
  1326.         bsr    save_tga_line
  1327.  
  1328.         moveq    #0,d4
  1329.         move.w    screen_vars+40,d4
  1330.         add.w    screen_vars+42,d4
  1331.         add.l    d4,d4
  1332.         add.l    d4,cur_pic_adr
  1333.  
  1334.         dbra    d1,.y_loop
  1335.         bsr    close_file
  1336.  
  1337.         rts
  1338.  
  1339.  
  1340.  
  1341.         move.l    pic_adr,a0
  1342.         move.w    pic_y,d0
  1343.         subq.w    #1,d0    
  1344.  
  1345.         moveq    #0,d7
  1346.         move.w    screen_vars+40,d7
  1347.         move.l    d7,d6
  1348.         add.w    screen_vars+42,d6
  1349.         add.l    d7,d7
  1350.         add.l    d6,d6
  1351.         move.w    line_length,d0
  1352.         mulu.w    d6,d0
  1353.         add.l    d0,a0
  1354.         
  1355.         move.w    pic_y,d5
  1356.         subq.w    #1,d5
  1357.         bmi.s    .err
  1358. .lines        bsr    write_file
  1359.         sub.l    d6,a0
  1360.         dbra    d5,.lines
  1361.  
  1362. .err        bsr    close_file
  1363.         rts
  1364.  
  1365.  
  1366. save_god_file:    lea    file_name(pc),a0
  1367.         bsr    create_file
  1368.         bmi    display_gemdos_error
  1369.         lea    god_head,a0
  1370.         move.w    #'G4',(a0)
  1371.         move.w    pic_x,2(a0)
  1372.         move.w    pic_y,4(a0)
  1373.         moveq    #6,d7
  1374. normal_save:    bsr    write_file
  1375.         bmi    display_gemdos_error        
  1376.         
  1377.         cmp.w    #4,pic_res        ;true colour
  1378.         beq    save_true        ;yes
  1379.  
  1380.         bsr    get_god_pal
  1381.         
  1382.         move.w    pic_y,d0
  1383.         subq.w    #1,d0
  1384.         bmi    .err
  1385. .write_line_loop                
  1386.         move.w    d0,-(a7)
  1387.         bsr    convert_god_line
  1388.         move.l    physic(pc),a0        ;line buffer
  1389.         moveq    #0,d7
  1390.         move.w    pic_x,d7        ;x pixels
  1391.         add.l    d7,d7            ;*2=tc line size
  1392.         bsr    write_file
  1393.         bmi    display_gemdos_error
  1394.         move.w    (a7)+,d0
  1395.         dbra    d0,.write_line_loop
  1396.  
  1397. .err        bsr    close_file
  1398.         rts
  1399.  
  1400. save_tga_file:    lea    file_name(pc),a0
  1401.         bsr    create_file
  1402.         bmi    display_gemdos_error
  1403.         lea    god_head,a0
  1404.         move.l    #$00000200,(a0)+    ; 0-3
  1405.         clr.l    (a0)+            ; 4-7
  1406.         clr.l    (a0)+            ; 8-11
  1407.         move.w    pic_x,d0
  1408.         ror.w    #8,d0
  1409.         move.w    d0,(a0)+        ; 12
  1410.         move.w    pic_y,d0
  1411.         ror.w    #8,d0
  1412.         move.w    d0,(a0)+        ; 14
  1413.         move.w    #$1020,(a0)        ; 16 bit, origin lower left
  1414.         lea    god_head,a0
  1415.         moveq    #18,d7            ; 18 bytes to save
  1416.         bsr    write_file
  1417.         bmi    display_gemdos_error        
  1418.         
  1419.         cmp.w    #4,pic_res        ;true colour
  1420.         beq    save_true_tga        ;yes
  1421.  
  1422.         bsr    get_god_pal
  1423.         
  1424.  
  1425.         move.w    pic_y,d1
  1426.         subq.w    #1,d1
  1427. .y_loop        bsr    convert_god_line
  1428.         bsr    save_tga_line
  1429.  
  1430. ;        moveq    #0,d2
  1431. ;        move.w    screen_vars+40,d2
  1432. ;        add.w    screen_vars+42,d2
  1433. ;        add.l    d2,d2
  1434. ;        add.l    d2,cur_pic_adr
  1435.  
  1436.         dbra    d1,.y_loop
  1437.  
  1438.         bsr    close_file
  1439.         
  1440.         rts
  1441.  
  1442. ;        move.w    pic_y,d0
  1443. ;        subq.w    #1,d0    
  1444. ;        mulu.w    line_length,d0
  1445. ;        add.l    d0,cur_pic_adr    
  1446.         
  1447.         move.w    pic_y,d0
  1448.         subq.w    #1,d0
  1449.         bmi    .err
  1450. .write_line_loop                
  1451.         move.w    d0,-(a7)
  1452.         bsr    convert_god_line
  1453.         sub.l    d4,cur_pic_adr
  1454.         sub.l    d4,cur_pic_adr
  1455.         move.l    physic(pc),a0        ;line buffer
  1456.         moveq    #0,d7
  1457.         move.w    pic_x,d7        ;x pixels
  1458.         add.l    d7,d7            ;*2=tc line size
  1459.         bsr    write_file
  1460.         bmi    display_gemdos_error
  1461.         move.w    (a7)+,d0
  1462.         dbra    d0,.write_line_loop
  1463.  
  1464. .err        bsr    close_file
  1465.         rts
  1466.  
  1467. ; GGGBBBBB ARRRRRGG 
  1468.  
  1469. save_tga_line:
  1470.     movem.l    d0-a6,-(a7)
  1471.  
  1472.     move.l    physic(pc),a0    ; physic
  1473.     move.w    pic_x,d3
  1474.     subq.w    #1,d3
  1475.  
  1476. .loop    bfextu    (a0){0:7},d0    ; 0RRRRR:GG
  1477.     bfextu    (a0){7:3},d1    ; GGG
  1478.     lsl.w    #5,d1        ; GGG00000
  1479.     bfextu    (a0){11:5},d2    ; BBBBB
  1480.     or.w    d2,d1        ; GGGBBBBB
  1481.     lsl.w    #8,d1
  1482.     or.w    d1,d0
  1483.     move.w    d0,(a0)+    ; write back converted word    
  1484.  
  1485.     dbra    d3,.loop
  1486.  
  1487.     moveq    #0,d7
  1488.     move.w    pic_x,d7
  1489.     add.l    d7,d7
  1490.     move.l    physic(pc),a0
  1491.     bsr    write_file
  1492.             
  1493.     movem.l    (a7)+,d0-a6
  1494.     rts
  1495.  
  1496. convert_god_line:
  1497.         movem.l    d0-a6,-(a7)        
  1498.  
  1499.         move.l    cur_pic_adr,a0
  1500.         move.l    physic(pc),a1    ;buffer space        
  1501.         lea    colour_table,a2
  1502.         move.w    pic_x,d4    ;pixels
  1503.         lsr.w    #4,d4        ;divide by 16
  1504.         subq.w    #1,d4        ;-1 for dbra
  1505.         bmi    .error
  1506.  
  1507. .line        move.w    pic_res,d3    ;0,1,2
  1508.         move.w    (plane_dbra,d3.w*2),d5 ;get dbra amount
  1509.         moveq    #0,d0
  1510. .loop1        moveq    #0,d2        ;d2=current pixel
  1511.         move    #31,d7
  1512.         move.l    a0,a3        ;screen address
  1513.         move.w    d5,d3        ;dbra    amount
  1514. .get_pix    bfextu    (a3){d0:1},d1    ;get bit
  1515.         bfins    d1,d2{d7:1}
  1516. ;        roxr.b    #1,d1        ;shift to X flag
  1517. ;        roxl.b    #1,d2        ;shift from X flag
  1518. ;        lsl.w    d2
  1519. ;        or.w    d1,d2
  1520.         addq.w    #2,a3        ;next plane
  1521.         subq.w    #1,d7
  1522.         dbra    d3,.get_pix                        
  1523.         move.w    (a2,d2.w*2),(a1)+    ;copy pixel    
  1524.         addq.l    #1,d0        ;next pixel
  1525.         cmp.w    #16,d0        ;last in plane
  1526.         blt.s    .loop1
  1527.         move.l    a3,a0
  1528.         dbra    d4,.line
  1529.  
  1530. ;        move.l    a0,cur_pic_adr
  1531.         moveq    #0,d4
  1532.         move.w    screen_vars+40,d4
  1533.         add.w    screen_vars+42,d4
  1534.         add.l    d4,d4
  1535.         add.l    d4,cur_pic_adr
  1536.  
  1537. ;        move.l    line_length,d7        ;line size in words    
  1538. ;        add.l    d7,cur_pic_adr        ;update ptr
  1539.  
  1540. .error
  1541.         movem.l    (a7)+,d0-a6
  1542.         rts    
  1543.  
  1544.  
  1545. get_god_pal:
  1546.         lea    pal_space,a0
  1547.         lea    colour_table,a1
  1548.         move.w    pic_res,d0
  1549.         move.w    (cols_dbra,d0.w*2),d0
  1550.         cmp.w    #255,d0
  1551.         beq    get_256_pal
  1552. .loop        bfextu    (a0){4:1},d1    ;lowest red bit
  1553.         bfextu    (a0){5:3},d2    ;other red bits
  1554.         lsl.w    d2        ;shift up a bit
  1555.         or.w    d2,d1        ;form red byte
  1556.         lsl.w    #1,d1        ;->5 bit value
  1557.         bfins    d1,(a1){0:5}    ;store in table
  1558.         bfextu    (a0){8:1},d1    ;lowest green bit
  1559.         bfextu    (a0){9:3},d2    ;other green bits
  1560.         lsl.w    d2        ;shift up a bit
  1561.         or.w    d2,d1        ;form green byte
  1562.         lsl.w    #2,d1        ;->6 bit value
  1563.         bfins    d1,(a1){5:6}    ;store in table
  1564.         bfextu    (a0){12:1},d1    ;lowest blue bit
  1565.         bfextu    (a0){13:3},d2    ;other blue bits
  1566.         lsl.w    d2        ;shift up a bit
  1567.         or.w    d2,d1        ;form blue byte
  1568.         lsl.w    #1,d1        ;->5 bit value
  1569.         bfins    d1,(a1){11:5}    ;store in table
  1570.         addq.w    #2,a0
  1571.         addq.w    #2,a1
  1572.         dbra    d0,.loop    ;loop for all colours
  1573.         rts        
  1574.  
  1575. get_256_pal:    lea    32(a0),a0
  1576.         lea    colour_table,a1
  1577. .loop        bfextu    (a0){0:5},d1
  1578.         bfins    d1,(a1){0:5}
  1579.         bfextu    (a0){8:6},d1
  1580.         bfins    d1,(a1){5:6}                
  1581.         bfextu    (a0){24:5},d1
  1582.         bfins    d1,(a1){11:5}                
  1583.         addq.w    #4,a0
  1584.         addq.w    #2,a1
  1585.         dbra    d0,.loop
  1586.         rts
  1587.  
  1588. cols_dbra    dc.w    0,3,15,255
  1589. plane_dbra    dc.w    0,1,3,7
  1590.  
  1591. st_pal_sizes    dc.l    4,8,32,0,0
  1592. falc_pal_sizes    dc.l    8,16,64,1024,0
  1593.  
  1594.  
  1595. save_videl_file:
  1596.     lea    file_name(pc),a0
  1597.     bsr    create_file
  1598.     bmi    display_gemdos_error
  1599.     lea    screen_vars+4,a0
  1600.     moveq    #42,d7
  1601.     bsr    write_file
  1602.     bsr    close_file
  1603.     rts
  1604. display_gemdos_error:
  1605.         lea    gemdos_errors,a0
  1606.         move.l    #(end_gemdos_errors-gemdos_errors)/8-1,d1
  1607. .find_err    cmp.l    (a0)+,d0
  1608.         beq    found_gemdos_error
  1609.         addq.l    #4,a0
  1610.         dbra    d1,.find_err
  1611.         lea    unerr,a0
  1612. found_gemdos_error
  1613.         move.l    (a0),a0
  1614.         moveq    #0,d0
  1615.         move.l    #180,d1
  1616.         bsr    print_string
  1617.         rts
  1618.  
  1619. create_file:    movem.l    d1-2/a0-2,-(a7)
  1620.         clr.w    -(a7)
  1621.         pea    (a0)
  1622.         move.w    #$3c,-(a7)
  1623.         trap    #1
  1624.         addq.l    #8,a7
  1625.         movem.l    (a7)+,d1-2/a0-a2
  1626.         move.w    d0,file_handle
  1627.         rts
  1628.  
  1629. open_file:    movem.l    d1-2/a0-2,-(a7)
  1630.         clr.w    -(a7)
  1631.         pea    (a0)
  1632.         move.w    #$3d,-(a7)
  1633.         trap    #1
  1634.         addq.l    #8,a7
  1635.         movem.l    (a7)+,d1-2/a0-a2
  1636.         move.w    d0,file_handle    
  1637.         rts
  1638.  
  1639. read_file:    movem.l    d1-2/a0-2,-(a7)
  1640.         pea    (a0)
  1641.         move.l    d7,-(a7)
  1642.         move.w    file_handle,-(a7)
  1643.         move.w    #$3f,-(a7)
  1644.         trap    #1
  1645.         lea    12(a7),a7
  1646.         movem.l    (a7)+,d1-2/a0-a2
  1647.         cmp.l    d7,d0
  1648.         beq.s    .rf
  1649.         move.l    #-1000,d0
  1650. .rf        rts
  1651.  
  1652. write_file:    movem.l    d1-2/a0-2,-(a7)
  1653.         pea    (a0)
  1654.         move.l    d7,-(a7)
  1655.         move.w    file_handle,-(a7)
  1656.         move.w    #$40,-(a7)    
  1657.         trap    #1
  1658.         lea    12(a7),a7
  1659.         movem.l    (a7)+,d1-2/a0-a2
  1660.         cmp.l    d7,d0
  1661.         beq.s    .l9
  1662.         move.l    #-1001,d0
  1663. .l9        rts
  1664.  
  1665. file_seek:    movem.l    d1-2/a0-2,-(a7)
  1666.         move.w    d0,-(a7)
  1667.         move.w    file_handle,-(a7)
  1668.         move.l    d1,-(a7)
  1669.         move.w    #$42,-(a7)
  1670.         trap    #1
  1671.         lea    10(a7),a7
  1672.         movem.l    (a7)+,d1-2/a0-a2
  1673.         rts
  1674.  
  1675. close_file:    movem.l    d1-2/a0-2,-(a7)
  1676.         move.w    file_handle,-(a7)
  1677.         move.w    #$3e,-(a7)
  1678.         trap    #1
  1679.         addq.l    #4,a7
  1680.         movem.l    (a7)+,d1-2/a0-a2
  1681.         rts
  1682.  
  1683. ***************************************************************************
  1684.     DATA
  1685. ***************************************************************************
  1686.     even
  1687.  
  1688. my_vector_table_name
  1689.     dc.l    "PINK"
  1690. my_vector_table:
  1691.     
  1692. o    set    0
  1693.     rept    $100
  1694.     dc.l    my_vector_jump+o
  1695. o    set    o+6
  1696.     endr
  1697.  
  1698. my_vector_jump:
  1699. o    set    0
  1700.     rept    $100
  1701.     jmp    ([o.w])
  1702. o    set    o+4
  1703.     endr
  1704.  
  1705. tiny_font    incbin    d:\gods\ripper\tinyfnt.bin
  1706.         even
  1707.  
  1708. Videl_640_200_2
  1709.     dc.l    640*200/8+256            * General
  1710.     dc.w    0,40,0,$400
  1711.     dc.w    0                                        * Flag Ordre
  1712.  
  1713.     dc.w    510,409,80,1007,160,434,0,0    * RGB
  1714.     dc.w    625,613,47,127,527,619
  1715.     dc.w    $181,%0100
  1716.  
  1717.     dc.w    198,141,21,627,80,150,0,0    * VGA 47 Hz
  1718.      dc.w    1337,1300,100,315,1115,1333
  1719.     dc.w    $186,%1001
  1720.  
  1721.  
  1722. ripper_txt
  1723. *                123456789 123456789 12345
  1724.     dc.b    "** RESERVOIR RIPPER II **",13,0
  1725. coder_txt
  1726.     dc.b    "** CODED BY MR PINK **",0
  1727. rg_txt
  1728. *                123456789 123456789 123456789
  1729.     dc.b    "** (C) 1998 RESERVOIR GODS **",0
  1730. menu_txt
  1731.     dc.b    "[F1]  VIEW SCREEN",13
  1732.     dc.b    "[F2]  SAVE VIDEL",13
  1733.     dc.b    "[F3]  SAVE SCREEN (RIP)",13
  1734.     dc.b    "[F4]  SAVE SCREEN (GOD)",13
  1735.     dc.b    "[F5]  SAVE SCREEN (TGA)",13,13
  1736.     dc.b    "[F10] EXIT RIPPER",13
  1737.     dc.b    0
  1738.  
  1739. st_txt        dc.b    "ST",0
  1740. falcon_txt    dc.b    "FALCON",0
  1741.  
  1742. variables_txt:
  1743.  
  1744. *                0         1         2         3         4         5         6         7         8
  1745. *                 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789
  1746.     dc.b    "COLS:               X:        Y:        PAL: ",13
  1747.     dc.b    "PXLSKIP:      FALWIDTH:      ST-SHIFT:      SP-SHIFT:      HSCROLL:      SYNC:",13
  1748.     dc.b    "HHT:      HBB:      HBE:      HDB:      HDE:      HSS:      HFS:      HEE:",13
  1749.     dc.b    "VFT:      VBB:      VBE:      VDB:      VDE:      VSS:      VCL:      VCO:",0
  1750.     even
  1751.  
  1752. word_txts
  1753.     dc.l    pic_x
  1754.     dc.w    6*23,0
  1755.     dc.l    pic_y
  1756.     dc.w    6*33,0
  1757.  
  1758.     dc.l    screen_vars+42        ;st width
  1759.     dc.w    6*9,1
  1760.     dc.l    screen_vars+40        ;030 width
  1761.     dc.w    6*24,1
  1762.     dc.l    screen_vars+36        ;sp shift
  1763.     dc.w    6*54,1
  1764.     dc.l    0
  1765.  
  1766. byte_txts
  1767.     dc.l    screen_vars+44        ;st shift
  1768.     dc.w    6*39,1
  1769.     dc.l    screen_vars+3        ;hscroll
  1770.     dc.w    6*68,1
  1771.     dc.l    screen_vars+32        ;sync hz
  1772.     dc.w    6*79,1
  1773.     dc.l    0
  1774.  
  1775.  
  1776. enter_file_txt    dc.b    "ENTER FILENAME:",0
  1777. single_string    dc.b    'A',0
  1778.  
  1779.  
  1780.     even
  1781.  
  1782. gemdos_errors:
  1783.     dc.l    -1000,frerr
  1784.     dc.l    -1001,fwerr
  1785.  
  1786.     dc.l    -32,einvfn
  1787.     dc.l    -33,efilnf
  1788.     dc.l    -34,epthnf
  1789.     dc.l    -36,eaccdn
  1790.     dc.l    -37,eihndl
  1791.     dc.l    -39,ensmem
  1792.     dc.l    -40,eimba
  1793.     dc.l    -46,edrive
  1794.     dc.l    -48,ensame
  1795.     dc.l    -49,enmfil
  1796.     dc.l    -58,elocked
  1797.     dc.l    -59,enslock
  1798.     dc.l    -64,erange
  1799.     dc.l    -65,eintrn
  1800.     dc.l    -66,eplfmt
  1801.     dc.l    -67,egsbf
  1802.     dc.l    -80,eloop
  1803.     dc.l    -200,emount
  1804. end_gemdos_errors
  1805.  
  1806. einvfn:    dc.b    "INVALID FUNCTION",0
  1807. efilnf:    dc.b    "FILE NOT FOUND",0
  1808. epthnf:    dc.b    "PATH NOT FOUND",0
  1809. eaccdn: dc.b    "ACCESS DENIED",0
  1810. eihndl: dc.b    "INVALID HANDLE",0
  1811. enhndl:    dc.b    "NO MORE HANDLES",0
  1812. ensmem:    dc.b    "OUT OF MEMORY",0
  1813. eimba:    dc.b    "INVALID MEMORY BLOCK ADDRESS",0
  1814. edrive:    dc.b    "INVALID DRIVE",0
  1815. ensame:    dc.b    "CROSS DEVICE RENAME",0
  1816. enmfil:    dc.b    "NO MORE FILES",0
  1817. elocked: dc.b    "RECORD IS ALREADY LOCKED",0
  1818. enslock: dc.b    "INVALID LOCK REMOVAL REQUEST",0
  1819. erange:    dc.b    "RANGE ERROR",0
  1820. eintrn: dc.b    "INTERNAL ERROR",0
  1821. eplfmt: dc.b    "INVALID PROGRAM LOAD FORMAT",0
  1822. egsbf: dc.b    "MEMORY BLOCK GROWTH FAILURE",0
  1823. eloop: dc.b    "TOO MANY SYMBOLIC LINKS",0
  1824. emount: dc.b    "MOUNT POINT CROSSED",0
  1825. frerr:    dc.b    "FILE READ ERROR",0
  1826. fwerr:    dc.b    "FILE WRITE ERROR",0
  1827. unerr:    dc.b    "UNKNOWN ERROR",0
  1828.  
  1829. scan_code_table:
  1830. *                0123456789ABCDEF
  1831.     dc.b    '**1234567890_=**'
  1832.     dc.b    'QWERTYUIOP[]**AS'
  1833.     dc.b    'DFGHJKL:,`*#ZXCV'
  1834.     dc.b    'BNM,./*** ******'
  1835.     dc.b    '**********-***+*'    
  1836.     dc.b    '****************'
  1837.     dc.b    '\**()/*789456123'
  1838.     dc.b    '0.*'
  1839.     even
  1840.  
  1841. res_txts:
  1842.     dc.l    two_colour_txt
  1843.     dc.l    four_colour_txt
  1844.     dc.l    sixteen_colour_txt
  1845.     dc.l    ep_colour_txt
  1846.     dc.l    t_colour_txt
  1847.  
  1848. two_colour_txt:
  1849.     dc.b    "2 COLOUR",0
  1850. four_colour_txt:
  1851.     dc.b    "4 COLOUR",0
  1852. sixteen_colour_txt:
  1853.     dc.b    "16 COLOUR",0
  1854. ep_colour_txt
  1855.     dc.b    "256 COLOUR",0
  1856. t_colour_txt
  1857.     dc.b    "TRUE COLOUR",0
  1858.  
  1859. long_string
  1860.     dc.b    '0123456789',0
  1861.  
  1862.     even
  1863.  
  1864.  
  1865. key_ptr:    dc.l     key_buffer
  1866.  
  1867. ddir:  dc.b    "A:\*.*"
  1868.        ds.b    256
  1869.  
  1870. ***************************************************************************
  1871.     BSS
  1872. ***************************************************************************
  1873. god_mode        ds.b    1
  1874. new_config        ds.b    1
  1875. check_bit        ds.b    1
  1876. vec_family        ds.b    1
  1877. v_toggle_mode        ds.b    1
  1878. vga_flag        ds.b    1
  1879. current_vec        ds.b    1
  1880. begin_ripping_flag    ds.b    1
  1881. reinstall_flag        ds.b    1
  1882. mouse_moved    ds.b    1
  1883. key_pressed    ds.b    1
  1884. current_key    ds.b    1
  1885. j1_packet:    ds.b    1
  1886. j2_packet:    ds.b    1
  1887.         even
  1888.  
  1889. new_sr        ds.w    1
  1890. cur_pic_adr    ds.l    1
  1891.  
  1892. cmd_adr        ds.l    1
  1893.  
  1894. god_head    ds.b    18
  1895.  
  1896. pic_adr        ds.l    1
  1897. magic        ds.l    1
  1898. rip_ver        ds.w    1
  1899. pic_res        ds.w    1
  1900. pic_x        ds.w    1
  1901. pic_y        ds.w    1
  1902. line_length    ds.w    1
  1903. pic_pal        ds.w    1
  1904.  
  1905. physic        ds.l    1
  1906. old118        ds.l    1
  1907. mfp_sei        ds.l    1
  1908.  
  1909. pic_length    ds.l    1
  1910. screenline_length    ds.l    1
  1911. screen_length    ds.l    1
  1912. mem_top        ds.l    1
  1913. file_handle    ds.w    1
  1914. text_counter    ds.w    1
  1915. old_vmode:    ds.w    1
  1916.  
  1917. reset_adr    ds.l    1
  1918.  
  1919. mousek:            ds.w    1
  1920. mouse_key:        ds.w    1
  1921. mousex:            ds.w    1
  1922. mousey:            ds.w    1
  1923. mousex_min:        ds.w    1
  1924. mousex_max:        ds.w    1
  1925. mousey_min:        ds.w    1
  1926. mousey_max:        ds.w    1
  1927. key_cntr:        ds.w    1
  1928. key_table:        ds.b    128
  1929. key_buffer:          ds.b     256
  1930.  
  1931. file_name:        ds.b    256
  1932.  
  1933. old_system_vars    ds.b    256
  1934. cur_system_vars    ds.b    256
  1935.  
  1936.         ds.b    2
  1937. screen_vars    ds.b    50
  1938. pal_space    ds.b    (256*4)+(16*2)
  1939.  
  1940. colour_table    ds.w    256
  1941. install_bits    ds.b    24
  1942.         ds.b    1024
  1943. rip_stack    ds.l    4
  1944.         ds.b    256
  1945. screen_space    ds.b    16000
  1946. end_ripper
  1947.  
  1948.