?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

  1. ;for s3m_period in 1...4095      -> lookup_table[s3m_period-1] = opl4_regs(s3m_period)
  2. ;for s3m_period in 4096...32767  -> lookup_table[(s3m_period-4096)/8+4096] = opl4_regs(s3m_period)
  3.  
  4.         DEVICE ZXSPECTRUM128
  5.         include "../_sdk/sys_h.asm"
  6.  
  7.         org PROGSTART
  8. begin
  9.         ld sp,0x4000
  10.         OS_HIDEFROMPARENT
  11.         ld e,6 ;textmode
  12.         OS_SETGFX
  13.         ld e,7
  14.         OS_CLS
  15.         ld hl,generatingstr
  16.         call print_hl
  17.         ld de,0x8000
  18.         ld hl,1
  19.         ld bc,4096
  20.         ld a,1
  21.         call writetablechunk
  22.         ld bc,4096
  23.         ld a,8
  24.         call writetablechunk
  25. ;write table to disk
  26.         ld hl,writingstr
  27.         call print_hl
  28.         ld de,outfilenamestr
  29.         call openstream_file
  30.         or a
  31.         jr z,.openedfile
  32.         ld de,outfilenamestr
  33.         OS_CREATEHANDLE
  34.         or a
  35.         ld hl,unabletowriteoutputstr
  36.         jp nz,printerrorandexit
  37.         ld a,b
  38.         ld (filehandle),a
  39. .openedfile
  40.         ld a,(filehandle)
  41.         ld b,a
  42.         ld de,0x8000
  43.         ld hl,0x4000
  44.         OS_WRITEHANDLE
  45.         call closestream_file
  46.         xor a
  47.         QUIT
  48.  
  49. printerrorandexit
  50.         call print_hl
  51.         ld hl,pressanykeystr
  52.         call print_hl
  53.         YIELDGETKEYLOOP
  54.         QUIT
  55.  
  56. writetablechunk
  57. ;hl = s3m period
  58. ;de = write addr
  59. ;bc = iterations
  60. ;a = period increment
  61.         ld (.increment),a
  62. .loop   push bc
  63.         push hl
  64.         call writelookupentry
  65.         pop hl
  66. .increment=$+1
  67.         ld bc,0
  68.         add hl,bc
  69.         pop bc
  70.         dec bc
  71.         ld a,b
  72.         or c
  73.         jr nz,.loop
  74.         ret
  75.  
  76. writelookupentry
  77. ;hl = s3m period
  78. ;de = write addr
  79.         push de
  80.         call opl4period
  81.         pop de
  82.         add hl,hl
  83.         ld a,b
  84.         add a,a
  85.         add a,a
  86.         add a,a
  87.         add a,a
  88.         or h
  89.         ld (de),a
  90.         inc de
  91.         ld a,l
  92.         or 1
  93.         ld (de),a
  94.         inc de
  95.         ret
  96.  
  97. opl4period
  98. ;hl = s3m period
  99. ;out: hl = f-number, b = octave
  100.         ld de,0
  101.         exx
  102.         ld de,0x0512
  103.         ld hl,0xb383
  104.         call uintdiv32
  105.         push de
  106.         push hl
  107.         ld b,-7
  108.         exx
  109.         pop hl
  110.         pop de
  111.         srl de : rr h
  112.         srl de : rr h
  113.         srl de : rr h
  114.         ld a,d
  115.         or e
  116.         or h
  117.         jr z,.skip
  118. .loop   exx
  119.         inc b
  120.         srl de : rr hl
  121.         exx
  122.         srl de : rr h
  123.         ld a,d
  124.         or e
  125.         or h
  126.         jr nz,.loop
  127. .skip   exx
  128.         ld a,h
  129.         and 0x3
  130.         ld h,a
  131.         ret
  132.  
  133.         include "../_sdk/file.asm"
  134.         include "common/muldiv.asm"
  135.  
  136. print_hl
  137.         ld a,(hl)
  138.         or a
  139.         ret z
  140.         push hl
  141.         PRCHAR
  142.         pop hl
  143.         inc hl
  144.         jp print_hl
  145.  
  146. generatingstr
  147.         db "Generating table...\r\n",0
  148. writingstr
  149.         db "Writing table...\r\n",0
  150. outfilenamestr
  151.         db "periodlookup.bin",0
  152. unabletowriteoutputstr
  153.         db "Failed to write output",0
  154. pressanykeystr
  155.         db "!\r\nPress any key to exit...\r\n",0
  156. end
  157.  
  158.         savebin "generateperiodlookup.com",begin,end-begin
  159.