?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. ;; This test should be kept identical to "savetap_test.asm" (except syntax error part)
  2. ;; But it does use ZX Next device (with 8kiB memory pages), to verify the "real tape"
  3. ;; works in such case too (the resulting TAP files must be identical on ZX48 and Next).
  4.  
  5.                 device zxspectrumnext
  6.  
  7. ; BASIC block
  8.         module bas
  9. line10:         db      0, 10
  10.                 dw      .len
  11. .cmds           ; BORDER NOT PI:
  12.                 db      #E7, #C3, #A7, ':'
  13.                 ; PAPER NOT PI:
  14.                 db      #DA, #C3, #A7, ':'
  15.                 ; INK VAL "7":
  16.                 db      #D9, #B0, '"7":'
  17.                 ; CLEAR VAL "32763" : REM demo-1 address
  18.                 db      #FD, #B0, '"32763"', #0D
  19. .len = $ - .cmds
  20.  
  21. line20:         db      0, 20
  22.                 dw      .len
  23. .cmds           ; POKE VAL "23739",CODE "o":
  24.                 db      #F4, #B0, '"23739",', #AF, '"o":'
  25.                 ; LOAD ""SCREEN#: LOAD ""CODE
  26.                 db      #EF, '""', #AA, ':', #EF, '""', #AF, #0D
  27. .len = $ - .cmds
  28.  
  29. line30:         db      0, 30
  30.                 dw      .len
  31. .cmds           ; RANDOMIZE USR VAL "32764" : REM demo address
  32.                 db      #F9, #C0, #B0, '"32764"', #0D
  33. .len = $ - .cmds
  34.  
  35. total = $ - line10
  36.         endmodule
  37.  
  38.  
  39. ; NUMS block
  40. nums            db      1
  41.                 dw      .datalen
  42. .data           db      #82,#49,#0F,#DA,#A2     ;; Value 3.1415927
  43. .datalen = $ - .data
  44. .savelen = $ - nums
  45.  
  46. ; CHARS block
  47. chars           db      1
  48.                 dw      .datalen
  49. .data           db      "SAVETAP testing character array"
  50. .datalen = $ - .data
  51. .savelen = $ - chars
  52.  
  53.  
  54. ; SCREEN$ block
  55.                 org     #4000
  56. screen:
  57.         dup 12
  58.                 block   256,#AA
  59.                 block   256,#55
  60.         edup
  61.         dup 24
  62.                 db      #07, #06, #06, #16, #05, #05, #0D, #04, #04, #14, #03, #03, #11, #02, #02, #29
  63.                 db      #29, #02, #02, #11, #03, #03, #14, #04, #04, #0D, #05, #05, #16, #06, #06, #07
  64.         edup
  65. .len = $ - screen
  66.  
  67.  
  68. ; CODE block
  69.                 org     #7FFC     ; to cross the slot-boundary
  70.  
  71. demo:           ei
  72.                 halt
  73.                 djnz    demo
  74. .loop           ei
  75.                 halt
  76.                 ld      hl,#5801
  77.                 ld      de,#5800
  78.                 ld      bc,#300
  79.                 ld      a,(de)
  80.                 ld      (#5B00),a
  81.                 ldir
  82.                 call    .rnd
  83.                 ld      c,a
  84.                 and     #0C
  85.                 sub     #0B
  86.                 jr      nc,.not12
  87.                 ld      a,2
  88. .not12          ld      d,a
  89.                 call    .rnd
  90.                 ld      e,a
  91.                 ld      hl,#5800
  92.                 add     hl,de
  93.                 ld      a,c
  94.                 and     #7F
  95.                 xor     (hl)
  96.                 ld      (hl),a
  97.                 jr      .loop
  98.  
  99. .rnd            ld      a,#29
  100.                 ld      b,a
  101.                 rrca
  102.                 rrca
  103.                 rrca
  104.                 xor     #1F
  105.                 add     a,b
  106.                 sbc     a,#FF
  107.                 ld      (.rnd+1),a
  108.                 ret
  109. .len = $ - demo
  110.         db      "XXXX"
  111.  
  112. ; Clear output tap file
  113.                 emptytap "savetap_next.tap"
  114. ; Store BASIC
  115.                 savetap "savetap_next.tap",BASIC,"tstSAVETAP", bas.line10, bas.total, 10
  116. ; Store SCREEN#
  117.                 savetap "savetap_next.tap",CODE,"intro", screen, screen.len
  118. ; Store CODE
  119.                 savetap "savetap_next.tap",CODE,"demo", demo, demo.len
  120. ; Store NUMBERS
  121.                 savetap "savetap_next.tap",NUMBERS,"n", nums, nums.savelen, 'n'
  122. ; Store CHARS
  123.                 savetap "savetap_next.tap",CHARS,"t$", chars, chars.savelen, 't'
  124. ; Store HEADLESS
  125.                 savetap "savetap_next.tap",HEADLESS, (screen + #1800), 32, 66 ; custom flag
  126.  
  127.  
  128. ; No autostart (#8000 is used)
  129.                 savetap "savetap_next.tap",BASIC,"No start", bas.line10, bas.total
  130. ; Default letter ('A' is used)
  131.                 savetap "savetap_next.tap",NUMBERS,"n", nums, nums.savelen
  132. ; Address + length > #10000 (block to the end of memory will be saved)
  133.                 savetap "savetap_next.tap",HEADLESS, #FFFF, 2
  134.  
  135. ; Extra variants of valid commands to exercise all code paths
  136.                 savetap "savetap_next.tap",CODE,"_extra1", demo, 1, 0x8000, 0x1234
  137.