home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD2.bin / bbs / dev / tbsource.lha / TBSource / Blank / Blank.S < prev    next >
Text File  |  1993-12-21  |  7KB  |  363 lines

  1. ;
  2. ; ### Blank v0.00b ###
  3. ;
  4. ; -   Created 880802 by JM
  5. ; - Recreated 910603 by TB
  6. ;
  7. ; Bugs: None born.
  8. ;
  9. ;
  10. ; Edited:
  11. ;
  12. ; - 880802 by JM -> v1.0    - kommentit
  13. ; - 880803 by JM -> v1.5    - lisatty CTRL+C
  14. ; - 910603 by TB -> v0.00a    - added checks for windows opening etc.
  15. ; - 910604 by TB -> v0.00b    - added checks for 2.0
  16. ; - 910723 by TB -> v0.00c    - changed write function for 2.0
  17. ;
  18.  
  19.         include    "jmplibs.i"        omia makroja
  20.         include    "hards.i"        hardisrekistereja
  21.         include "XREF:exec.xref"    maarittelee Execin rutiinit
  22.         include "XREF:dos.xref"        maarittelee Dossin rutiinit
  23.         include    "XREF:intuition.xref"
  24.         include    "XREF:gfx.xref"
  25.  
  26. _LVOOpenScrTList:    equ     -$264
  27. _LVOOpenWinTList:     equ    -$25e
  28.  
  29. keyboard    equ    $bfec01        nappaimiston rekisteri
  30. mouse0        equ    $dff00a        hiiren 0 rekisteri
  31. mouse1        equ    $dff00c        hiiren 1 rekisteri
  32. diskctrl    equ    $bfd100        levyaseman ohjausrekisteri
  33.  
  34. nappis        equ    0        offset-arvot omaan taulukkoon
  35. hiiri0        equ    2
  36. hiiri1        equ    4
  37. levyas        equ    6
  38. laskuri        equ    8
  39. raja        equ    12
  40. dmasailo    equ    16
  41.  
  42. SAMMUTUS    equ    %0000000110100000 pysayttaa Copperin, Spritet ja nayton
  43.  
  44. INTB_VERTB    equ    5        keskeytystyyppi Vertical Blanking
  45.  
  46. CTRL_C        equ    12        bitti, joka ilmaisee CTRL+C:n painamisen
  47.  
  48. Start        push    d2-d7/a2-a6
  49.         move.l    a0,a2
  50.         openlib    Dos,cleanup
  51.         lib    Dos,Output
  52.         move.l    d0,_stdout
  53.         cmp.b    #"?",(a2)
  54.         beq    CommandLineHelp
  55.  
  56.         move.l    a2,a0
  57.         bsr    ota_luku
  58.         mulu.w    #50,d0
  59.         bvs    viive_asetettu
  60.         beq    viive_asetettu
  61.         move.l    d0,IData+raja
  62.  
  63. viive_asetettu    openlib    Intuition,cleanup
  64.         openlib    Gfx,cleanup
  65.  
  66.         print    <"Blank version 0.01b",13,10>,_stdout
  67.  
  68. ;test for 2.0
  69.  
  70.         move.l    _IntuitionBase(pc),a6
  71.         move.w    $14(a6),d0
  72.         cmp.w    #36,d0
  73.         bcc    StartPatch20
  74.         move.w    #0,Kick
  75.         jmp    Patch1
  76.  
  77. StartPatch20:    print    <"Using KickStart 2.0 - Patching new Open(Window/Screen)TagList and Write vectors",13,10>,_stdout
  78.         move.w    #1,Kick
  79.         move.l    _IntuitionBase(pc),a1
  80.         move.l    #_LVOOpenScrTList,a0
  81.         lea.l    OpScrTL(pc),a2
  82.         move.l    a2,d0
  83.         lib    Exec,SetFunction
  84.         move.l    d0,OldOpScrTL
  85.  
  86.         move.l    _IntuitionBase(pc),a1
  87.         move.l    #_LVOOpenWinTList,a0
  88.         lea.l    OpWinTL(pc),a2
  89.         move.l    a2,d0
  90.         lib    Exec,SetFunction
  91.         move.l    d0,OldOpWinTL
  92.  
  93.         move.l    _DosBase(pc),a1
  94.         move.l    #_LVOWrite,a0
  95.         lea.l    NewWrite(pc),a2
  96.         move.l    a2,d0
  97.         lib    Exec,SetFunction
  98.         move.l    d0,OldWrite
  99.  
  100. Patch1:        move.l    _IntuitionBase(pc),a1
  101.         move.l    #_LVOOpenScreen,a0
  102.         lea.l    OpScr(pc),a2
  103.         move.l    a2,d0
  104.         lib    Exec,SetFunction
  105.         move.l    d0,OldOpScr
  106.  
  107.         move.l    _IntuitionBase(pc),a1
  108.         move.l    #_LVOOpenWindow,a0
  109.         lea.l    OpWin(pc),a2
  110.         move.l    a2,d0
  111.         lib    Exec,SetFunction
  112.         move.l    d0,OldOpWin
  113.  
  114.         move.l    _IntuitionBase(pc),a1
  115.         move.l    #_LVOPrintIText,a0
  116.         lea.l    PrIT(pc),a2
  117.         move.l    a2,d0
  118.         lib    Exec,SetFunction
  119.         move.l    d0,OldPrIT
  120.  
  121. ;        move.l    _IntuitionBase(pc),a1
  122. ;        move.l    #_LVODisplayBeep,a0
  123. ;        lea.l    DisB(pc),a2
  124. ;        move.l    a2,d0
  125. ;        lib    Exec,SetFunction
  126. ;        move.l    d0,OldDisB
  127.  
  128.         move.l    _GfxBase(pc),a1
  129.         move.l    #_LVOText,a0
  130.         lea.l    NewText(pc),a2
  131.         move.l    a2,d0
  132.         lib    Exec,SetFunction
  133.         move.l    d0,OldText
  134.  
  135.         moveq.l    #INTB_VERTB,d0
  136.         lea    keskstruc(pc),a1
  137.         lib    Exec,AddIntServer
  138.  
  139.         moveq.l    #0,d0
  140.         bset.l    #CTRL_C,d0
  141.         lib    Exec,Wait
  142.  
  143. cleanup        print    <"***Break, Blank terminating",13,10>,_stdout
  144.         moveq.l    #INTB_VERTB,d0
  145.         lea    keskstruc(pc),a1
  146.         lib    Exec,RemIntServer
  147.  
  148.         cmp.w    #1,Kick
  149.         bne    cleanup1
  150.         move.l    OldOpScrTL(pc),a0
  151.         move.l    a0,d0
  152.         move.l    _IntuitionBase(pc),a1
  153.         move.l    #_LVOOpenScrTList,a0
  154.         lib    Exec,SetFunction
  155.  
  156.         move.l    OldOpWinTL(pc),a0
  157.         move.l    a0,d0
  158.         move.l    _IntuitionBase(pc),a1
  159.         move.l    #_LVOOpenWinTList,a0
  160.         lib    Exec,SetFunction
  161.  
  162.         move.l    OldWrite(pc),a0
  163.         move.l    a0,d0
  164.         move.l    _DosBase(pc),a1
  165.         move.l    #_LVOWrite,a0
  166.         lib    Exec,SetFunction
  167.  
  168. cleanup1    move.l    OldOpScr(pc),a0
  169.         move.l    a0,d0
  170.         move.l    _IntuitionBase(pc),a1
  171.         move.l    #_LVOOpenScreen,a0
  172.         lib    Exec,SetFunction
  173.  
  174.         move.l    OldOpWin(pc),a0
  175.         move.l    a0,d0
  176.         move.l    _IntuitionBase(pc),a1
  177.         move.l    #_LVOOpenWindow,a0
  178.         lib    Exec,SetFunction
  179.  
  180.         move.l    OldPrIT(pc),a0
  181.         move.l    a0,d0
  182.         move.l    _IntuitionBase(pc),a1
  183.         move.l    #_LVOPrintIText,a0
  184.         lib    Exec,SetFunction
  185.  
  186. ;        move.l    OldDisB(pc),a0
  187. ;        move.l    a0,d0
  188. ;        move.l    _IntuitionBase(pc),a1
  189. ;        move.l    #_LVODisplayBeep,a0
  190. ;        lib    Exec,SetFunction
  191.  
  192.         move.l    OldText(pc),a0
  193.         move.l    a0,d0
  194.         move.l    _GfxBase(pc),a1
  195.         move.l    #_LVOText,a0
  196.         lib    Exec,SetFunction
  197.  
  198.         closlib    Intuition
  199.         closlib    Gfx
  200. cleanup_out    closlib    Dos
  201.         pull    d2-d7/a2-a6
  202.         rts
  203.  
  204. ota_luku    moveq.l    #0,d0
  205.         moveq.l    #0,d1
  206. ota_seuraava    move.b    (a0)+,d1
  207.         cmp.b    #'0',d1
  208.         bcs    otettu
  209.         cmp.b    #'9',d1
  210.         bhi    otettu
  211.         sub.b    #'0',d1
  212.         mulu.w    #10,d0
  213.         add.l    d1,d0
  214.         bra    ota_seuraava
  215. otettu        rts
  216.  
  217. introutine    push    d4-d7
  218.         lea    $dff000,a0
  219.         move.b    keyboard,d4
  220.         move.w    mouse0,d5
  221.         move.w    mouse1,d6
  222.         move.b    diskctrl,d7
  223.  
  224.         cmp.w    #$ff,Change
  225.         beq    touhuaa
  226.  
  227.         cmp.w    hiiri0(a1),d5
  228.         bne    touhuaa
  229.  
  230.         cmp.b    levyas(a1),d7
  231.         bne    touhuaa
  232.  
  233.         cmp.b    nappis(a1),d4
  234.         bne    touhuaa
  235.  
  236.         cmp.w    hiiri1(a1),d6
  237.         bne    touhuaa
  238.  
  239. ei_puuhaa    move.l    laskuri(a1),d0
  240.         bmi    nukkuu_jo
  241.  
  242.         addq.l    #1,d0
  243.         cmp.l    raja(a1),d0
  244.         bcs    ei_nukkumaan
  245.  
  246. nukkumaan    bset.l    #31,d0
  247.         move.l    d0,laskuri(a1)
  248.         move.w    DMACONR(a0),dmasailo(a1)
  249.         move.w    #SAMMUTUS,DMACON(a0)
  250.         clr.w    COLOR0(a0)
  251.  
  252. nukkuu_jo    pull    d4-d7
  253.         moveq.l    #0,d0
  254.         rts
  255.  
  256. ei_nukkumaan    move.l    d0,laskuri(a1)
  257.         pull    d4-d7
  258.         moveq.l    #0,d0
  259.         rts
  260.  
  261. touhuaa        move.b    d4,nappis(a1)
  262.         move.w    d5,hiiri0(a1)
  263.         move.w    d6,hiiri1(a1)
  264.         move.b    d7,levyas(a1)
  265.         move.w    #$00,Change
  266.         tst.l    laskuri(a1)
  267.         bpl    ei_herata
  268.  
  269. heratys        move.w    dmasailo(a1),d0
  270.         bset.l    #15,d0
  271.         move.w    d0,DMACON(a0)
  272.  
  273. ei_herata    clr.l    laskuri(a1)
  274.         pull    d4-d7
  275.         moveq.l    #1,d0
  276.         rts
  277.  
  278. ; Here starts the library changes
  279.  
  280. OpWin:        move.w    #$ff,Change
  281.         move.l    OldOpWin(pc),a1
  282.         jmp    (a1)
  283.  
  284. OpScr:        move.w    #$ff,Change
  285.         move.l    OldOpScr(pc),a1
  286.         jmp    (a1)
  287.  
  288. OpScrTL:    move.w    #$ff,Change
  289.         push    a2
  290.         move.l    OldOpScrTL(pc),a2
  291.         jsr    (a2)
  292.         pull    a2
  293.         rts
  294.  
  295. OpWinTL:    move.w    #$ff,Change
  296.         push    a2
  297.         move.l    OldOpWinTL(pc),a2
  298.         jsr    (a2)
  299.         pull    a2
  300.         rts
  301.  
  302. PrIT:        move.w    #$ff,Change
  303.         push    a2
  304.         move.l    OldPrIT(pc),a2
  305.         jsr    (a2)
  306.         pull    a2
  307.         rts
  308.  
  309. ;DisB:        move.w    #$ff,Change
  310. ;        move.l    OldDisB(pc),a1
  311. ;        jmp    (a1)
  312.  
  313. NewText:    move.w    #$ff,Change
  314.         push    a2
  315.         move.l    OldText(pc),a2
  316.         jsr    (a2)
  317.         pull    a2
  318.         rts
  319.  
  320. NewWrite:    move.w    #$ff,Change
  321.         move.l    OldWrite(pc),a1
  322.         jmp    (a1)
  323.  
  324.         ds.l    0
  325. OldOpWin:    dc.l    0
  326. OldOpScr:    dc.l    0
  327. OldPrIT:    dc.l    0
  328. OldOpScrTL:    dc.l    0
  329. OldOpWinTL:    dc.l    0
  330. ;OldDisB:    dc.l    0
  331. OldText:    dc.l    0
  332. OldWrite:    dc.l    0
  333. Change:        dc.w    0
  334. Kick:        dc.w    0
  335. _stdout:    dc.l    0
  336.  
  337.         ds.l    0
  338. keskstruc    dc.l    0        ;ln_Succ
  339.         dc.l    0        ;ln_Pred
  340.         dc.b    2        ;ln_Type = NT_INTERRUPT
  341.         dc.b    -1        ;ln_Pri
  342.         dc.l    intname        ;ln_Name
  343.         dc.l    IData        ;data
  344.         dc.l    introutine    ;server
  345.  
  346. IData        dc.w    0        vanha nappiksen arvo
  347.         dc.w    0        vanha hiiren 0 arvo
  348.         dc.w    0        vanha hiiren 1 arvo
  349.         dc.w    0        vanha levyaseman arvo
  350.         dc.l    0        odotettu aika
  351.         dc.l    3000        maksimi odotusaika
  352.         dc.w    0        dma-sailo
  353.         dc.w    0        varalla
  354.  
  355. intname        dc.b    'Blank_Interrupt',0    keskeytyksen nimi
  356.  
  357.         libnames            kirjastojen osoittimet, nimet
  358.  
  359.         INCLUDE    "LWF:Blank/BlCommandLineHelp.i"
  360.  
  361.         end
  362.  
  363.