?login_element?

Subversion Repositories NedoOS

Rev

Rev 126 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;Transient BIOS v1.4, (c)2003 Zilogator
  2. ;export from MRS09 by Busy 01/2018
  3. ;sjasmplus adaptation by z00m 01/2018
  4. ;
  5. ;flasher
  6. ;       org     #5b00,0
  7. ;       di
  8. ;       call    8187
  9. ;       ld      a,#83
  10. ;       out     (#e3),a
  11. ;       ld      hl,#6000
  12. ;       ld      de,#2000
  13. ;       ld      bc,#2000
  14. ;       ldir
  15. ;       ld      a,#40
  16. ;       out     (#e3),a
  17. ;       ei
  18. ;       ret
  19. ;
  20. ;flash  di
  21. ;       call    8187
  22. ;       ld      a,#83
  23. ;       out     (#e3),a
  24. ;       ld      hl,#00
  25. ;       ld      de,#6000
  26. ;       ld      bc,#2000
  27. ;fla    ld      a,(de)
  28. ;       inc     de
  29. ;       ld      (hl),a
  30. ;       push    bc
  31. ;       ld      b,0
  32. ;flt    cp      (hl)
  33. ;       jr      z,flb
  34. ;       djnz    flt
  35. ;       pop     bc
  36. ;flr    xor     a
  37. ;       out     (#e3),a
  38. ;       ei
  39. ;       ret
  40. ;flb    pop     bc
  41. ;       inc     hl
  42. ;       dec     bc
  43. ;       ld      a,b
  44. ;       or      c
  45. ;       jr      nz,fla
  46. ;       jr      flr
  47. ;
  48. ;TBIOS starts here
  49.  
  50.         device  zxspectrum48
  51.  
  52.         org     #0000
  53. p0000   di
  54. p0000r  xor     a
  55.         ld      sp,#4000
  56.         jp      logoex
  57.  
  58.         org     #0008
  59. p0008   ld      hl,(#5c5d)
  60. p0008r  call    click
  61.         push    hl
  62.         ld      hl,p0008r
  63. cont    ex      (sp),hl
  64.         jp      offret
  65.  
  66.         org     #001f
  67. l001f   ei
  68.         ret
  69.  
  70.         org     #0038
  71. p0038   db      24
  72. p0038r  push    hl
  73.         ld      hl,p0038r
  74.         jr      cont
  75.  
  76.         org     #004d
  77. l004d   push    af
  78.         ld      a,(#2022)
  79.         and     a
  80.         call    z,click
  81.         jr      z,ncnt
  82.         push    hl
  83.         ld      hl,(#2020)
  84.         inc     hl
  85.         ld      (#2020),hl
  86.         pop     hl
  87. ncnt    pop     af
  88.         ret
  89.  
  90.         org     #0066
  91. p0066   db      24
  92. p0066r  push    hl
  93.         push    de
  94.         push    bc
  95.         ld      a,#fd
  96.         in      a,(#fe)
  97.         push    af
  98.         bit     3,a
  99.         call    z,dset
  100.         pop     af
  101.         rra
  102.         jr      c,nalt
  103.         ld      a,167
  104.         ld      (#8000+adispl),a
  105. nalt    rra
  106.         jr      c,nbck
  107.         ld      bc,#7ffd
  108.         ld      a,23
  109.         out     (c),a
  110.         xor     a
  111.         ld      (#8001+sdispl),a
  112.         im      1
  113.         inc     a
  114. nbck    rra
  115.         call    nc,ident
  116.         ld      a,#fe
  117.         in      a,(#fe)
  118.         rra
  119.         push    af
  120.         call    nc,rsect
  121.         pop     af
  122.         bit     3,a
  123.         call    z,video
  124.         ld      a,#7f
  125.         in      a,(#fe)
  126.         rra
  127.         jr      c,ntest
  128.         xor     a
  129.         out     (#e3),a
  130.         ld      sp,#4000
  131. tlop    call    ramt
  132.         ld      a,b
  133.         or      c
  134.         jp      z,0
  135.         jr      tlop
  136. ntest   rra
  137.         push    af
  138.         call    nc,wsect
  139.         pop     af
  140.         push    af
  141.         and     2
  142.         call    z,tread
  143.         pop     af
  144.         and     4
  145.         call    z,begs
  146.         ld      a,#fb
  147.         in      a,(#fe)
  148.         and     16
  149.         call    z,taps
  150.         pop     bc
  151.         pop     de
  152.         pop     hl
  153.         pop     af
  154.         jp      offrtn
  155.  
  156. click   push    bc
  157.         push    af
  158.         ld      a,8
  159.         ld      c,#aa
  160. ppp1    ld      b,32
  161. pppo    push    bc
  162.         xor     #10
  163.         out     (#fe),a
  164.         ld      b,c
  165. del3    djnz    del3
  166.         pop     bc
  167.         djnz    pppo
  168.         rlc     c
  169.         jr      c,ppp1
  170.         pop     af
  171.         pop     bc
  172.         ret
  173.  
  174. cls     ld      hl,#5aff
  175.         ld      a,#47
  176. clrscr  ld      (hl),a
  177.         dec     hl
  178.         bit     3,h
  179.         jr      nz,clratr
  180.         xor     a
  181. clratr  bit     5,h
  182.         jr      z,clrscr
  183.         ret
  184.  
  185. logoex  out     (#fe),a
  186.         out     (#e3),a
  187.         ld      (#2014),a
  188.         ld      a,#3f
  189.         ld      i,a
  190.         call    cls
  191.         ld      hl,#1ff6
  192.         ld      de,20404
  193.         call    lea
  194.         dec     hl
  195.         ld      de,23030
  196.         call    lea
  197.         dec     hl
  198.         ld      de,8639
  199.         call    lea
  200.         call    click
  201.         dec     hl
  202.         ld      de,20479
  203.         im      1
  204.         ei
  205.         ld      a,#7f
  206.         in      a,(#fe)
  207.         and     16
  208.         jr      nz,nb
  209.         call    lea
  210.         dec     hl
  211.         ld      de,23039
  212.         call    lea
  213.         ld      b,0
  214. lp      halt
  215.         djnz    lp
  216. nb      ld      de,#f000
  217.         ld      hl,txtho
  218.         call    twa
  219.         ld      b,100
  220. waitpx  halt
  221.         ld      a,#7f
  222.         in      a,(#fe)
  223.         and     #1f
  224.         cp      #1d
  225.         jr      z,atest
  226. ssc     djnz    waitpx
  227.         di
  228. rescon  ld      bc,#1ffd
  229.         ld      a,#04
  230.         out     (c),a
  231.         ld      b,#7f
  232.         ld      a,#10
  233.         out     (c),a
  234.         xor     a
  235.         out     (#e3),a
  236.         ld      (#2022),a
  237.         ld      b,a
  238.         ld      sp,#3d00
  239.         ld      hl,#ffff
  240. fillff  push    hl
  241.         djnz    fillff
  242.         ld      hl,p0000r
  243.         jp      offjph
  244.  
  245. atest   ld      de,#4000
  246. atc     ld      a,#fd
  247.         in      a,(#fe)
  248.         and     #1f
  249.         cp      #1e
  250.         jr      nz,ssc
  251.         dec     de
  252.         ld      a,d
  253.         or      e
  254.         jr      nz,atc
  255.         di
  256.         call    click
  257. wfr     call    cls
  258.         in      a,(#fe)
  259.         cpl
  260.         and     31
  261.         jr      nz,wfr
  262.         call    click
  263.         ld      hl,txtmt
  264.         ld      de,#00
  265.         call    twa
  266.         ld      de,#2000
  267.         ld      hl,#2014
  268.         ld      (hl),a
  269.         ld      a,3
  270.         out     (#e3),a
  271.         xor     (hl)
  272.         ld      (hl),a
  273.         cp      (hl)
  274.         jr      z,okblik
  275.         xor     a
  276.         out     (#e3),a
  277.         ld      hl,txtnp
  278.         call    twa
  279.         jr      btcont
  280. okblik  ld      a,#80
  281.         out     (#e3),a
  282.         ld      (#2022),a
  283.         ld      hl,txthn
  284.         call    twa
  285.         call    waitk
  286.         call    twa
  287.         ld      hl,0
  288.         ld      (#2020),hl
  289.         ld      bc,50255
  290. blik    call    offret
  291.         dec     bc
  292.         inc     b
  293.         djnz    blik
  294.         rst     #38
  295.         di
  296.         xor     a
  297.         out     (#e3),a
  298.         push    de
  299.         call    cnp
  300.         pop     de
  301.         ld      hl,#200f
  302.         call    twa
  303.         ld      hl,txtrn
  304.         call    twa
  305. btcont  ld      hl,txtht
  306.         ld      de,#4000
  307.         call    twa
  308.         ld      hl,#6000
  309.         push    hl
  310.         ld      hl,#c000
  311.         ld      a,#9a
  312.         out     (#7f),a
  313.         ld      a,1
  314.         out     (#7f),a
  315.         ld      c,(hl)
  316.         inc     c
  317.         xor     a
  318.         out     (#7f),a
  319.         ld      (hl),c
  320.         inc     a
  321.         out     (#7f),a
  322.         ld      a,(hl)
  323.         cp      c
  324.         jr      z,no80
  325.         ld      hl,txt80
  326.         call    twa
  327.         pop     de
  328.         ld      hl,txtab
  329.         ld      bc,#8000
  330.         ld      a,#80
  331.         call    testcn
  332.         out     (#7f),a
  333.         jr      cont48
  334. no80    ld      bc,#7ffd
  335.         xor     a
  336.         out     (c),a
  337.         ld      a,(hl)
  338.         inc     a
  339.         ex      af,af
  340.         ld      a,1
  341.         out     (c),a
  342.         ex      af,af
  343.         ld      (hl),a
  344.         ex      af,af
  345.         dec     a
  346.         out     (c),a
  347.         ex      af,af
  348.         cp      (hl)
  349.         jr      z,no128
  350. for128  ld      hl,txt128
  351.         call    twa
  352.         pop     de
  353.         ld      a,8
  354. tlp     dec     a
  355.         cp      3
  356.         jr      nz,nolf
  357.         ld      de,#8000
  358. nolf    ld      bc,#7ffd
  359.         out     (c),a
  360.         ld      hl,txtpg
  361.         push    af
  362.         add     a,"0"
  363.         ld      (#2013),a
  364.         call    twa
  365.         ld      hl,#2013
  366.         ld      bc,#c000
  367.         ld      a,#40
  368.         call    testcn
  369.         pop     af
  370.         and     a
  371.         jr      nz,tlp
  372.         jr      hostfn
  373. no128   ld      hl,txt48
  374.         call    twa
  375.         pop     de
  376. cont48  ld      hl,txtpm
  377.         ld      bc,#8000
  378.         ld      a,#80
  379.         call    testcn
  380.         ld      de,#8000
  381.         ld      bc,#4000
  382.         ld      a,#40
  383.         ld      hl,txtvr
  384.         call    testcn
  385. hostfn  ld      hl,txtmm
  386.         ld      de,#a000
  387.         call    twa
  388.         ld      a,3
  389.         out     (#e3),a
  390.         ld      hl,#2000
  391.         xor     (hl)
  392.         ld      (hl),a
  393.         cp      (hl)
  394.         ld      hl,txtai
  395.         jr      nz,maprai
  396.         ld      hl,0
  397.         ld      de,#2000
  398.         ld      b,d
  399.         ld      c,e
  400.         ldir
  401.         ld      hl,txtin
  402. maprai  ld      a,#40
  403.         out     (#e3),a
  404.         ld      de,#c000
  405.         call    twa
  406.         ld      de,#e000
  407.         call    twa
  408.         ld      hl,stepxc
  409.         ld      de,#5b00
  410.         ld      bc,txtho-stepxc
  411.         ldir
  412.         ld      hl,#5b00+rdispl
  413.         ld      (#5b01+t1),hl
  414.         ld      (#5b01+t2),hl
  415.         ld      (#5b01+t3),hl
  416.         ld      hl,#5b00+wdispl
  417.         ld      (#5b01+t4),hl
  418.         ld      (#5b01+t5),hl
  419.         ld      (#5b01+t6),hl
  420.         ld      (#5b01+t7),hl
  421.         ld      de,#0800
  422.         ld      a,"0"
  423. dramt   push    af
  424.         ld      (#2013),a
  425.         ld      hl,txtdp
  426.         call    twa
  427.         ld      hl,#2013
  428.         ld      bc,#2000
  429.         ld      a,#20
  430.         call    testcn
  431.         pop     af
  432.         inc     a
  433.         cp      "4"
  434.         jr      c,dramt
  435.         ld      hl,txtee
  436.         ld      de,#2800
  437.         call    twa
  438.         ld      de,#4800
  439.         call    twa
  440.         call    waitk
  441.         ld      bc,#00
  442.         ld      a,#20
  443.         call    testcn
  444.         ld      de,#6800
  445.         ld      hl,txtdd
  446.         call    twa
  447.         ld      de,#8800
  448.         ld      a,160
  449. ddl     out     (#bb),a
  450.         push    af
  451.         push    hl
  452.         ld      hl,txtdl
  453.         call    twa
  454.         pop     hl
  455.         call    twa
  456.         ld      a,#ec
  457.         call    waitid
  458.         jr      nz,nohd
  459.         ld      hl,txthd
  460.         ld      bc,proghd
  461.         jr      dfou
  462. nohd    ld      a,#a1
  463.         call    waitid
  464.         jr      nz,nocd
  465.         ld      hl,txtcd
  466.         ld      bc,prognl
  467. dfou    push    bc
  468.         call    twa
  469.         ld      bc,#a3
  470.         ld      hl,#2200
  471.         inir
  472.         inir
  473.         ld      hl,progcd
  474.         call    prgint
  475.         pop     hl
  476.         call    prgint
  477.         jr      endl
  478. nocd    ld      hl,txtno
  479.         call    twa
  480. endl    pop     af
  481.         ld      hl,txtsl
  482.         ld      de,#5000
  483.         add     a,16
  484.         cp      192
  485.         jp      c,ddl
  486.         call    waitk
  487.         jp      rescon
  488.  
  489. xchvr   push    hl
  490.         push    bc
  491.         push    de
  492.         ld      hl,#4000
  493.         ld      de,#2200
  494.         ld      bc,6912
  495.         jr      nc,nchan
  496.         ex      de,hl
  497. nchan   ldir
  498.         pop     de
  499.         pop     bc
  500.         pop     hl
  501.         ret
  502.  
  503. testcn  push    bc
  504.         push    af
  505.         call    twa
  506.         pop     bc
  507.         pop     hl
  508.         ld      c,0
  509.         push    de
  510.         ld      a,b
  511.         cp      #20
  512.         jr      z,outst
  513.         xor     #40
  514.         call    z,xchvr
  515.         push    af
  516.         call    stepxc
  517.         pop     af
  518.         scf
  519.         call    z,xchvr
  520. retto   ld      (#2020),bc
  521.         call    cnp
  522.         pop     de
  523.         ld      hl,#200e
  524.         ld      (hl)," "
  525.         call    twa
  526.         ld      hl,txbok
  527.         jp      twa
  528. outst   ld      (#5bfe),sp
  529.         ld      sp,#5bfe
  530.         ld      de,#5c00
  531.         push    hl
  532.         push    bc
  533.         ld      a,(#2013)
  534.         add     a,#80-"0"
  535.         jp      #5b00+xdispl
  536.  
  537. prgint  ld      a,(hl)
  538.         inc     hl
  539.         cp      #ff
  540.         ret     nc
  541.         cp      #fe
  542.         jr      nc,appen
  543.         and     a
  544.         ld      e,a
  545.         jr      nz,appen
  546.         ld      a,32
  547.         add     a,d
  548.         jr      nc,ldda
  549.         add     a,8
  550. ldda    ld      d,a
  551. appen   call    twa
  552.         ld      c,(hl)
  553.         inc     hl
  554.         ld      b,(hl)
  555.         inc     hl
  556.         push    bc
  557.         ld      b,(hl)
  558.         inc     hl
  559.         or      (hl)
  560.         inc     hl
  561.         ex      (sp),hl
  562.         jr      nz,numb
  563. typp    ld      a,(hl)
  564.         inc     hl
  565.         ld      (#2013),a
  566.         ld      a,(hl)
  567.         inc     hl
  568.         ld      (#2012),a
  569.         push    hl
  570.         ld      hl,#2012
  571.         push    bc
  572.         call    twa
  573.         pop     bc
  574.         pop     hl
  575.         djnz    typp
  576.         jr      pophlc
  577. numb    ld      c,a
  578.         push    de
  579.         ex      de,hl
  580.         call    cna
  581.         pop     de
  582.         ld      a,"0"
  583.         ld      b,19
  584. loops   inc     l
  585.         cp      (hl)
  586.         jr      nz,typit
  587.         djnz    loops
  588. typit   call    twa
  589. pophlc  pop     hl
  590.         jr      prgint
  591.  
  592. waitid  ei
  593.         out     (#bf),a
  594.         ld      b,250
  595. waitil  in      a,(#bf)
  596.         xor     #48
  597.         and     #c8
  598.         jr      z,waitrt
  599.         halt
  600.         djnz    waitil
  601. waitrt  di
  602.         ret
  603.  
  604. waitk   push    af
  605. wk      xor     a
  606. wtd     in      a,(#fe)
  607.         cpl
  608.         and     31
  609.         jr      z,wtd
  610.         pop     af
  611.         ret
  612.  
  613.         org     #0580
  614. ramt    ld      hl,16384
  615.         ld      bc,#c000
  616. stepxc  push    bc
  617.         push    hl
  618. wrtzrr  xor     a
  619. wrtzer  call    wflash
  620.         jr      nz,bugx
  621.         dec     bc
  622.         ld      a,b
  623.         or      c
  624.         jr      nz,wrtzrr
  625.         pop     hl
  626.         pop     bc
  627.         push    bc
  628.         push    hl
  629. lokzer  xor     a
  630.         or      (hl)
  631.         jr      nz,bugx
  632.         dec     a
  633. wrtffs  call    wflash
  634.         jr      nz,bugx
  635.         dec     bc
  636.         ld      a,b
  637.         or      c
  638.         jr      nz,lokzer
  639.         pop     hl
  640.         pop     bc
  641.         push    bc
  642.         push    hl
  643.         ld      d,a
  644. fillx   ld      a,(hl)
  645.         inc     a
  646.         jr      nz,bugx
  647. filly   call    prand
  648. wrtpos  call    wflash
  649.         jr      z,donex
  650. bugx    pop     hl
  651. bugy    pop     bc
  652.         xor     a
  653.         ld      c,a
  654.         ld      b,a
  655.         ret
  656. donex   dec     bc
  657.         ld      a,b
  658.         or      c
  659.         jr      nz,fillx
  660.         pop     hl
  661.         pop     bc
  662.         ld      d,a
  663.         push    bc
  664.         push    hl
  665. checkx  call    prand
  666.         cp      (hl)
  667.         jr      nz,bugx
  668.         cpl
  669. wrtcpl  call    wflash
  670.         jr      nz,bugx
  671.         dec     bc
  672.         ld      a,b
  673.         or      c
  674.         jr      nz,checkx
  675.         pop     hl
  676.         pop     bc
  677.         ld      d,a
  678.         push    bc
  679. lastck  call    prand
  680.         add     a,(hl)
  681.         inc     a
  682.         jr      nz,bugy
  683.         inc     hl
  684.         dec     bc
  685.         ld      a,b
  686.         or      c
  687.         jr      nz,lastck
  688.         pop     bc
  689.         ret
  690.  
  691. prand   ld      a,d
  692.         add     a,a
  693.         add     a,a
  694.         add     a,d
  695.         inc     a
  696.         ld      d,a
  697.         xor     b
  698.         ret
  699.  
  700. wflash  ld      (hl),a
  701.         push    bc
  702.         ld      b,0
  703. rchck   cp      (hl)
  704.         jr      z,retw
  705.         djnz    rchck
  706. retw    pop     bc
  707.         inc     hl
  708.         ret
  709.  
  710. ramts   out     (#e3),a
  711.         ldir
  712.         pop     bc
  713.         pop     hl
  714.         push    hl
  715.         push    bc
  716.         call    #5b00
  717.         pop     de
  718.         pop     hl
  719.         push    bc
  720.         ld      bc,#5c00
  721. putbg   ld      a,(bc)
  722.         call    #5b00+wdispl
  723.         inc     bc
  724.         dec     de
  725.         ld      a,d
  726.         or      e
  727.         jr      nz,putbg
  728.         pop     bc
  729.         ld      sp,(#5bfe)
  730.         out     (#e3),a
  731.         jp      retto
  732.  
  733. txtho   db      "Transient BIOS v"
  734.         db      "1.4 ",#7F," Zilogator "
  735.         db      "2003 - Hold SS+A"
  736.         db      " to run autotest"
  737.         db      0
  738. txthn   db      "Hold NMI, press "
  739.         db      "key: "
  740.         db      0
  741. txtie   db      "Making 50000 "
  742.         db      "edges, "
  743.         db      0
  744. txtrn   db      " done, "
  745.         db      "release NMI"
  746.         db      0
  747. txtmt   db      "CLOCKING LOGIC "
  748.         db      "TEST: "
  749.         db      0
  750. txtnp   db      "Skipped, turn off"
  751.         db      " MAPRAM mode to "
  752.         db      "get it work"
  753.         db      0
  754. txbok   db      " OK  "
  755.         db      0
  756. txtht   db      "HOST RAM TEST "
  757.         db      "["
  758.         db      0
  759. txt48   db      "48KB]:"
  760.         db      0
  761. txt80   db      "80KB]:"
  762.         db      0
  763. txt128  db      "128KB]:"
  764.         db      0
  765. txtab   db      "Auxiliary 32k"
  766.         db      0
  767. txtpm   db      "Main 32k"
  768.         db      0
  769. txtvr   db      "Videoram 16k"
  770.         db      0
  771. txtpg   db      "Page"
  772.         db      0
  773. txtmm   db      "MAPRAM MODE TEST:"
  774.         db      0
  775. txtai   db      "Already "
  776. txtin   db      "OK, installed"
  777.         db      0
  778. txtdm   db      "DIVIDE RAM TEST:"
  779.         db      0
  780. txtdp   db      "Bank"
  781.         db      0
  782. txtee   db      "DIVIDE EEPROM "
  783.         db      "TEST:"
  784.         db      0
  785. txtrm   db      "Open EPROM jumper"
  786.         db      " for testing, "
  787.         db      "press key: "
  788.         db      0
  789. txtep   db      "Eeprom"
  790.         db      0
  791. txtdd   db      "DETECTING AT-IDE"
  792.         db      " AND ATAPI "
  793.         db      "DEVICES:"
  794.         db      0
  795. txtma   db      "0 [MASTER]: "
  796.         db      0
  797. txtdl   db      "DEVICE "
  798.         db      0
  799. txtsl   db      "1 [SLAVE]: "
  800.         db      0
  801. txthd   db      "Disk"
  802.         db      0
  803. txtcd   db      "CD-Rom"
  804.         db      0
  805. txtno   db      "None"
  806.         db      0
  807. progcd  db      0
  808.         db      "Model: "
  809.         db      0
  810.         dw      #2236
  811.         db      20
  812.         db      0
  813.         db      49
  814.         db      "Rev: "
  815.         db      0
  816.         dw      #222e
  817.         db      4
  818.         db      0
  819. prognl  db      #ff
  820. proghd  db      0
  821.         db      "SN: "
  822.         db      0
  823.         dw      #2214
  824.         db      10
  825.         db      0
  826.         db      32
  827.         db      "Buffer: "
  828.         db      0
  829.         dw      #222a
  830.         db      2
  831.         db      #80
  832.         db      #fe
  833.         db      " sectors"
  834.         db      0
  835.         dw      #2013
  836.         db      1
  837.         db      0
  838.         db      0
  839.         db      "Current CHS: "
  840.         db      0
  841.         dw      #226d
  842.         db      2
  843.         db      #80
  844.         db      #fe
  845.         db      "/"
  846.         db      0
  847.         dw      #226f
  848.         db      2
  849.         db      #80
  850.         db      #fe
  851.         db      "/"
  852.         db      0
  853.         dw      #2271
  854.         db      2
  855.         db      #80
  856.         db      32
  857.         db      "  Default CHS: "
  858.         db      0
  859.         dw      #2203
  860.         db      2
  861.         db      #80
  862.         db      #fe
  863.         db      "/"
  864.         db      0
  865.         dw      #2207
  866.         db      2
  867.         db      #80
  868.         db      #fe
  869.         db      "/"
  870.         db      0
  871.         dw      #220d
  872.         db      2
  873.         db      #80
  874.         db      0
  875.         db      "Current "
  876.         db      " capacity: "
  877.         db      0
  878.         dw      #2275
  879.         db      4
  880.         db      #80
  881.         db      #fe
  882.         db      " sectors  "
  883.         db      "Multiple "
  884.         db      "sectors: "
  885.         db      0
  886.         dw      #225e
  887.         db      1
  888.         db      #80
  889.         db      0
  890.         db      "LBA addressable"
  891.         db      " sectors: "
  892.         db      0
  893.         dw      #227b
  894.         db      4
  895.         db      #80
  896.         db      #fe
  897.         db      "  Multiple "
  898.         db      "setting: "
  899.         db      0
  900.         dw      #2276
  901.         db      1
  902.         db      80
  903.         db      #ff
  904.  
  905. lea     xor     a
  906.         ld      b,a
  907.         ld      a,(hl)
  908.         dec     hl
  909.         rra
  910.         ld      c,a
  911.         jr      c,leb
  912.         or      (hl)
  913.         ret     z
  914.         ld      a,15
  915.         and     c
  916.         ld      b,4
  917. lex     srl     c
  918.         djnz    lex
  919.         push    hl
  920.         ld      l,(hl)
  921.         ld      h,a
  922.         add     hl,de
  923.         inc     c
  924.         inc     c
  925. leb     inc     c
  926.         lddr
  927.         jr      c,lea
  928.         pop     hl
  929.         dec     hl
  930.         jr      lea
  931.  
  932. wsect   ld      b,12
  933.         ld      hl,#4000
  934.         ld      a,(23296)
  935.         and     31
  936.         add     a,160
  937.         out     (187),a
  938.         ld      de,#c040
  939.         call    wait
  940.         ld      a,2
  941.         out     (175),a
  942.         ld      a,0
  943.         out     (179),a
  944.         ld      a,0
  945.         out     (183),a
  946.         ld      a,b
  947.         out     (171),a
  948.         ld      a,#30
  949.         out     (191),a
  950. sector  ld      de,#c848
  951.         call    wait
  952.         push    bc
  953.         ld      bc,#a3
  954.         otir
  955.         otir
  956.         pop     bc
  957.         djnz    sector
  958.         jr      frew
  959.  
  960. rsect   ld      b,12
  961.         ld      hl,#4000
  962.         ld      a,(23296)
  963.         and     31
  964.         add     a,160
  965.         out     (187),a
  966.         ld      de,#c040
  967.         call    wait
  968.         ld      a,2
  969.         out     (175),a
  970.         ld      a,0
  971.         out     (179),a
  972.         ld      a,0
  973.         out     (183),a
  974.         ld      a,b
  975.         out     (171),a
  976.         ld      a,#20
  977.         out     (191),a
  978. sektor  ld      de,#c848
  979.         call    wait
  980.         push    bc
  981.         ld      bc,#a3
  982.         inir
  983.         inir
  984.         pop     bc
  985.         djnz    sektor
  986. frew    in      a,(191)
  987.         ret
  988.  
  989. wait    in      a,(191)
  990.         xor     e
  991.         and     d
  992.         ret     z
  993.         xor     a
  994.         in      a,(254)
  995.         and     31
  996.         jr      nz,wait
  997.         ret
  998.  
  999. twa     xor     a
  1000.         ld      b,a
  1001.         or      (hl)
  1002.         inc     hl
  1003.         ret     z
  1004.         push    hl
  1005.         push    de
  1006.         ld      h,4
  1007.         rra
  1008.         ld      l,a
  1009.         ld      c,a
  1010.         rla
  1011.         xor     e
  1012.         add     hl,hl
  1013.         add     hl,hl
  1014.         add     hl,hl
  1015.         sbc     hl,bc
  1016.         ld      bc,#800f
  1017.         rra
  1018.         rr      b
  1019.         srl     e
  1020.         jr      c,twb
  1021.         ld      c,#f0
  1022. twb     ex      de,hl
  1023.         ld      a,#e0
  1024.         and     h
  1025.         or      l
  1026.         ld      l,a
  1027.         ld      a,#18
  1028.         and     h
  1029.         add     a,#40
  1030.         ld      h,a
  1031. twc     ld      a,(de)
  1032.         bit     7,b
  1033.         jr      z,twd
  1034.         rrca
  1035.         rrca
  1036.         rrca
  1037.         rrca
  1038. twd     xor     (hl)
  1039.         and     c
  1040.         xor     (hl)
  1041.         ld      (hl),a
  1042.         inc     h
  1043.         inc     de
  1044.         sra     b
  1045.         jr      nc,twc
  1046.         ld      a,c
  1047.         cpl
  1048.         and     (hl)
  1049.         ld      (hl),a
  1050.         pop     de
  1051.         pop     hl
  1052.         inc     e
  1053.         jr      twa
  1054.  
  1055. cnp     ld      bc,#0280
  1056.         ld      de,#2021
  1057. cna     ld      hl,#2013
  1058. cnc     ld      (hl),"0"
  1059.         dec     l
  1060.         jr      nz,cnc
  1061. cnd     ld      l,#13
  1062.         ld      a,(de)
  1063.         and     c
  1064.         add     a,255
  1065. cne     ld      a,(hl)
  1066.         adc     a,a
  1067.         sub     "0"
  1068.         cp      "9"+1
  1069.         jr      c,cnf
  1070.         sub     #0a
  1071. cnf     ccf
  1072.         ld      (hl),a
  1073.         dec     l
  1074.         jr      nz,cne
  1075.         srl     c
  1076.         jr      nc,cnd
  1077.         ld      c,128
  1078.         dec     de
  1079.         djnz    cnd
  1080.         ret
  1081.  
  1082. video   ld      hl,#5b80
  1083.         and     4
  1084.         jr      z,cus
  1085.         ld      hl,matrdf
  1086. cus     ld      a,#f7
  1087.         in      a,(#fe)
  1088.         ld      de,16
  1089.         ld      b,5
  1090. msl     rra
  1091.         jr      nc,vva
  1092.         add     hl,de
  1093.         djnz    msl
  1094. vva     xor     a
  1095.         out     (#e3),a
  1096.         ld      d,#22
  1097.         call    gen
  1098.         ld      hl,dsc
  1099.         ld      de,#2600
  1100.         ld      bc,sen-dsc
  1101.         ld      a,31
  1102. crt     ldir
  1103.         ld      hl,sbg
  1104.         ld      c,sen-sbg
  1105.         dec     a
  1106.         jr      nz,crt
  1107.         ld      c,lar-sbg
  1108.         ldir
  1109.         ld      b,32
  1110. mla     dec     hl
  1111.         dec     hl
  1112.         ldi
  1113.         ldi
  1114.         djnz    mla
  1115.         ld      c,gen-lar
  1116.         ldir
  1117.         ld      a,i
  1118.         push    af
  1119.         push    ix
  1120.         ei
  1121. vlp     ld      ix,23296
  1122.         inc     (ix+8)
  1123.         ld      a,5
  1124.         out     (#ab),a
  1125.         ld      a,(ix+1)
  1126.         ld      e,(ix+5)
  1127.         inc     e
  1128.         cp      e
  1129.         jr      c,sok
  1130.         dec     e
  1131.         sub     e
  1132.         inc     (ix+2)
  1133. sok     out     (#af),a
  1134.         add     a,5
  1135.         ld      (ix+1),a
  1136.         ld      a,(ix+2)
  1137.         cp      (ix+6)
  1138.         jr      c,hok
  1139.         xor     a
  1140.         inc     (ix+3)
  1141.         jr      nz,hok
  1142.         inc     (ix+4)
  1143. hok     ld      (ix+2),a
  1144.         add     a,(ix+0)
  1145.         out     (#bb),a
  1146.         ld      a,(ix+3)
  1147.         out     (#b3),a
  1148.         ld      a,(ix+4)
  1149.         out     (#b7),a
  1150.         ld      de,#c040
  1151.         call    wait
  1152.         ld      a,#20
  1153.         out     (#bf),a
  1154.         halt
  1155.         ld      de,#c848
  1156.         ld      hl,#2800
  1157.         ld      b,2
  1158. rsx     call    wait
  1159.         push    bc
  1160.         ld      bc,#a3
  1161.         inir
  1162.         inir
  1163.         pop     bc
  1164.         djnz    rsx
  1165.         ld      a,(ix+8)
  1166.         and     1
  1167.         push    af
  1168.         add     a,#40
  1169.         ld      b,a
  1170.         ld      c,#1f
  1171.         pop     af
  1172.         rlca
  1173.         add     a,#22
  1174.         ld      h,a
  1175.         call    #2600
  1176.         ld      a,#fd
  1177.         in      a,(#fe)
  1178.         and     2
  1179.         jr      nz,nhl
  1180.         ld      b,(ix+7)
  1181. wff     halt
  1182.         djnz    wff
  1183. nhl     ld      a,#bf
  1184.         in      a,(#fe)
  1185.         rra
  1186.         jp      c,vlp
  1187.         pop     ix
  1188.         pop     af
  1189.         ret     pe
  1190.         di
  1191.         ret
  1192.  
  1193. dsc     ld      de,#c848
  1194.         call    wait
  1195.         ld      e,c
  1196.         ld      d,b
  1197.         inc     d
  1198.         inc     d
  1199.         push    bc
  1200. sbg     in      a,(#a3)
  1201.         ld      l,a
  1202.         ld      a,(hl)
  1203.         inc     h
  1204.         ld      (bc),a
  1205.         ldd
  1206.         res     0,h
  1207. sen     pop     bc
  1208.         ld      a,4
  1209.         xor     b
  1210.         ld      b,a
  1211.         and     4
  1212.         jp      nz,#2606
  1213.         ld      a,32
  1214.         add     a,c
  1215.         ld      c,a
  1216.         jp      nc,#2606
  1217.         push    hl
  1218.         push    bc
  1219.         ld      a,b
  1220.         rra
  1221.         rra
  1222.         rra
  1223.         and     3
  1224.         add     a,#28
  1225.         ld      h,a
  1226.         add     a,#58-#28
  1227.         ld      d,a
  1228.         ld      l,0
  1229.         ld      e,l
  1230.         ld      c,l
  1231.         ld      b,9
  1232.         ldi
  1233. lar     djnz    $-64
  1234.         pop     bc
  1235.         pop     hl
  1236.         ld      a,8
  1237.         add     a,b
  1238.         ld      b,a
  1239.         cp      #58
  1240.         jp      c,#2600
  1241.         in      a,(#bf)
  1242.         ret
  1243.  
  1244. gen     ld      e,0
  1245.         ld      b,#50
  1246. ged     push    bc
  1247. gec     ld      a,e
  1248.         ld      b,#11
  1249. geb     push    hl
  1250. gea     cp      (hl)
  1251.         rl      c
  1252.         inc     hl
  1253.         sla     b
  1254.         jr      nc,gea
  1255.         pop     hl
  1256.         rlca
  1257.         rlca
  1258.         rlca
  1259.         rlca
  1260.         jr      nz,geb
  1261.         ld      a,c
  1262.         cpl
  1263.         ld      (de),a
  1264.         inc     e
  1265.         jr      nz,gec
  1266.         ld      c,4
  1267.         add     hl,bc
  1268.         pop     bc
  1269.         sla     b
  1270.         ret     z
  1271.         dec     d
  1272.         jr      c,ged
  1273.         inc     d
  1274.         inc     d
  1275.         inc     d
  1276.         jr      ged
  1277.  
  1278. vrcp    ld      hl,#e000
  1279.         ld      de,#4000
  1280.         ld      bc,6912
  1281.         ldir
  1282.         ret
  1283.  
  1284. dset    push    af
  1285.         ld      a,#17
  1286.         ld      bc,#7ffd
  1287.         out     (c),a
  1288.         call    vrcp
  1289.         ld      c,ident-servcd
  1290.         ld      hl,servcd
  1291.         ld      de,#8000
  1292.         ldir
  1293.         ld      hl,#fff4
  1294.         ld      (hl),#c3
  1295.         ld      l,#ff
  1296.         ld      (hl),#18
  1297.         ld      hl,#8000
  1298.         ld      (#fff5),hl
  1299.         pop     af
  1300.         bit     4,a
  1301.         jr      nz,nogam
  1302.         ld      hl,#e810
  1303.         ld      (#8000+ndispl),hl
  1304.         ld      hl,#8001+bdispl
  1305.         dec     (hl)
  1306.         dec     (hl)
  1307.         xor     a
  1308.         ld      (#8002+ndispl),a
  1309. nogam   ld      a,#7f
  1310.         in      a,(#fe)
  1311.         and     4
  1312.         jr      nz,noem
  1313.         ld      a,10
  1314.         ld      (#8001+cdispl),a
  1315.         ld      a,74
  1316.         ld      (#8001+bdispl),a
  1317. noem    ld      hl,#be00
  1318. fllit   ld      (hl),#ff
  1319.         inc     l
  1320.         jr      nz,fllit
  1321.         ld      a,h
  1322.         inc     h
  1323.         ld      (hl),#ff
  1324.         ld      i,a
  1325.         im      2
  1326.         ret
  1327.  
  1328. servcd  push    af
  1329.         push    bc
  1330. frame   ld      a,#3f
  1331.         ld      bc,#7ffd
  1332.         and     a
  1333.         rra
  1334.         exx
  1335.         ex      af,af
  1336.         push    af
  1337.         push    bc
  1338. barg    ld      bc,870
  1339. wt      dec     bc
  1340.         inc     b
  1341.         djnz    wt
  1342.         jr      nop3
  1343. nop1    nop
  1344. nop2    nop
  1345. nop3    nop
  1346. nop4    nop
  1347. nop5    nop
  1348.         ld      b,192
  1349. qew     exx
  1350.         ex      af,af
  1351. swout   out     (c),a
  1352. altplc  ccf
  1353.         jr      c,noxor
  1354.         xor     8
  1355. noxor   jr      nc,conti
  1356.         ld      b,#7f
  1357. conti   exx
  1358.         ex      af,af
  1359. carg    ld      c,9
  1360. delln   dec     c
  1361.         jr      nz,delln
  1362.         ld      c,0
  1363. nopa    nop
  1364.         djnz    qew
  1365.         pop     bc
  1366.         pop     af
  1367.         exx
  1368.         ex      af,af
  1369.         ccf
  1370.         rla
  1371.         bit     0,a
  1372.         jr      z,stocr
  1373.         xor     16
  1374. stocr   ld      (#8001+fdispl),a
  1375.         pop     bc
  1376.         pop     af
  1377.         jp      #38
  1378.  
  1379. ident   ld      a,#f7
  1380.         in      a,(#fe)
  1381.         and     2
  1382.         ld      a,#a0
  1383.         jr      nz,idm
  1384.         ld      a,#b0
  1385. idm     ld      hl,#5b00
  1386.         ld      (hl),a
  1387.         out     (#bb),a
  1388.         xor     a
  1389.         ld      b,4
  1390. w       inc     l
  1391.         ld      (hl),a
  1392.         djnz    w
  1393.         ld      de,#c040
  1394.         call    wait
  1395.         ld      a,#ec
  1396.         out     (#bf),a
  1397.         ld      de,#c848
  1398.         call    wait
  1399.         ld      hl,#2200
  1400.         ld      bc,#a3
  1401.         inir
  1402.         inir
  1403.         ld      de,#c040
  1404.         call    wait
  1405.         ld      a,(#220c)
  1406.         ld      (23301),a
  1407.         out     (#ab),a
  1408.         ld      a,(#2206)
  1409.         ld      (23302),a
  1410.         dec     a
  1411.         ld      c,a
  1412.         ld      a,(23296)
  1413.         or      c
  1414.         out     (#bb),a
  1415.         ld      de,#c040
  1416.         call    wait
  1417.         ld      a,#91
  1418.         out     (#bf),a
  1419.         ld      de,#c040
  1420.         call    wait
  1421. cnow    jp      click
  1422.  
  1423. nrthl   ld      de,(23297)
  1424.         ld      bc,(23299)
  1425.         ld      a,(23301)
  1426.         xor     e
  1427.         jr      nz,chsok
  1428.         ld      e,a
  1429.         inc     d
  1430.         ld      a,(23302)
  1431.         xor     d
  1432.         jr      nz,chsok
  1433.         ld      d,a
  1434.         inc     bc
  1435. chsok   inc     e
  1436.         ld      a,(23296)
  1437.         or      d
  1438.         out     (#bb),a
  1439.         push    de
  1440.         ld      de,#c040
  1441.         call    wait
  1442.         pop     de
  1443.         inc     a
  1444.         out     (#ab),a
  1445.         ld      a,e
  1446.         out     (#af),a
  1447.         ld      a,c
  1448.         out     (#b3),a
  1449.         ld      a,b
  1450.         out     (#b7),a
  1451.         ld      a,#20
  1452.         out     (#bf),a
  1453.         push    bc
  1454.         push    de
  1455.         ld      de,#c848
  1456.         call    wait
  1457.         ld      hl,#2400
  1458.         ld      bc,#a3
  1459.         inir
  1460.         inir
  1461.         ld      de,#c040
  1462.         call    wait
  1463.         pop     de
  1464.         pop     bc
  1465.         ret
  1466.  
  1467. pushm   ld      (23297),de
  1468.         ld      (23299),bc
  1469.         ret
  1470.  
  1471. taps    ld      de,taptag
  1472.         ld      hl,#2400
  1473.         call    begc
  1474.         ld      hl,#2618
  1475.         ld      (23305),hl
  1476.         ret
  1477.  
  1478. begs    ld      de,pictag
  1479.         ld      hl,#2500
  1480. begc    ld      (23305),de
  1481.         ld      (23307),hl
  1482. begsl   ld      a,(23297)
  1483.         and     7
  1484.         out     (#fe),a
  1485.         xor     a
  1486.         in      a,(#fe)
  1487.         and     31
  1488.         ret     z
  1489.         call    nrthl
  1490.         push    bc
  1491.         push    de
  1492.         ld      b,12
  1493.         ld      hl,(23307)
  1494.         ld      de,(23305)
  1495.         call    swrap
  1496.         pop     de
  1497.         pop     bc
  1498.         jr      z,ckey
  1499.         call    pushm
  1500.         jr      begsl
  1501. ckey    xor     a
  1502.         out     (#fe),a
  1503.         in      a,(#fe)
  1504.         cpl
  1505.         and     31
  1506.         jr      nz,ckey
  1507.         jp      click
  1508.  
  1509. tread   ld      de,#c000
  1510.         call    fets
  1511.         ld      de,#e000
  1512.         call    fets
  1513.         call    vrcp
  1514.         jr      ckey
  1515.  
  1516. fets    ld      bc,#1b00
  1517. nexr    ld      hl,(23305)
  1518. pude    push    de
  1519.         bit     1,h
  1520.         jr      z,noren
  1521.         res     1,h
  1522.         push    hl
  1523.         push    bc
  1524.         call    nrthl
  1525.         call    pushm
  1526.         pop     bc
  1527.         pop     hl
  1528. noren   ex      de,hl
  1529.         ld      hl,-#2600
  1530.         add     hl,de
  1531.         add     hl,bc
  1532.         jr      c,hlpok
  1533.         ld      hl,0
  1534. hlpok   ex      (sp),hl
  1535.         jr      nc,bcok
  1536.         push    hl
  1537.         ld      hl,#2601
  1538.         sbc     hl,de
  1539.         ld      b,h
  1540.         ld      c,l
  1541.         pop     hl
  1542. bcok    ex      de,hl
  1543.         ldir
  1544.         pop     bc
  1545.         ld      a,b
  1546.         or      c
  1547.         jr      nz,pude
  1548.         ld      c,25
  1549.         add     hl,bc
  1550.         ld      (23305),hl
  1551.         ret
  1552.  
  1553. swrap   push    hl
  1554. read    ld      a,(de)
  1555.         cp      (hl)
  1556.         jr      nz,nosuc
  1557.         inc     de
  1558.         inc     hl
  1559.         djnz    read
  1560. nosuc   pop     hl
  1561.         ret
  1562.  
  1563. pictag  db      "00000001.png"
  1564.  
  1565. taptag  db      #13,0,0,3
  1566.         db      "DithvIDE"
  1567.  
  1568. matrdf  db      #3f,#1f,#2f,#0f
  1569.         db      #7f,#5f,#6f,#4f
  1570.         db      #bf,#9f,#af,#8f
  1571.         db      #ff,#df,#ef,#cf
  1572.  
  1573. chess   db      #0f,#cf,#3f,#ff
  1574.         db      #8f,#4f,#bf,#7f
  1575.         db      #2f,#ef,#1f,#df
  1576.         db      #af,#6f,#9f,#5f
  1577.  
  1578. matcdf  db      #0f,#4f,#8f,#1f
  1579.         db      #bf,#ff,#cf,#5f
  1580.         db      #7f,#cf,#df,#9f
  1581.         db      #3f,#af,#6f,#2f
  1582.  
  1583. matodf  db      #ff,#ef,#df,#cf
  1584.         db      #4f,#3f,#2f,#bf
  1585.         db      #5f,#0f,#1f,#af
  1586.         db      #6f,#7f,#8f,#9f
  1587.  
  1588. mattdf  db      #0f,#2f,#5f,#9f
  1589.         db      #1f,#4f,#8f,#cf
  1590.         db      #3f,#7f,#bf,#ef
  1591.         db      #6f,#af,#df,#ff
  1592.  
  1593. matzdf  db      #0f,#cf,#4f,#8f
  1594.         db      #1f,#df,#5f,#9f
  1595.         db      #2f,#ef,#6f,#af
  1596.         db      #3f,#ff,#7f,#bf
  1597.  
  1598.         org     #04c6
  1599. p04c6   ld      hl,#1f80
  1600. p04c6r  call    click
  1601.         push    hl
  1602.         ld      hl,p04c6r
  1603.         jp      cont
  1604.  
  1605.         org     #0562
  1606. p0562   in      a,(#fe)
  1607. p0562r  call    click
  1608.         push    hl
  1609.         ld      hl,p0562r
  1610.         jp      cont
  1611.  
  1612.         org     #15d0
  1613.         incbin  "tbios-logo.bin"
  1614.  
  1615.         org     #1ff7
  1616. offrtn  retn
  1617. offret  ret
  1618. offjph  jp      (hl)
  1619.  
  1620. adispl  equ     altplc-servcd
  1621. sdispl  equ     swout-servcd
  1622. rdispl  equ     prand-stepxc
  1623. t1      equ     filly-stepxc
  1624. t2      equ     checkx-stepxc
  1625. t3      equ     lastck-stepxc
  1626. wdispl  equ     wflash-stepxc
  1627. t4      equ     wrtpos-stepxc
  1628. t5      equ     wrtcpl-stepxc
  1629. t6      equ     wrtzer-stepxc
  1630. t7      equ     wrtffs-stepxc
  1631. xdispl  equ     ramts-stepxc
  1632. ndispl  equ     nopa-servcd
  1633. cdispl  equ     carg-servcd
  1634. bdispl  equ     barg-servcd
  1635. fdispl  equ     frame-servcd
  1636.  
  1637.         savebin "tbiosv14.bin",$0000,$2000
  1638.  
  1639.         end
  1640.