Browse Source

Merge pull request #126 from wwarthen/dev

Dev
pull/134/head
b1ackmai1er 6 years ago
committed by GitHub
parent
commit
c4cdaca038
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. BIN
      Doc/RomWBW Applications.pdf
  2. BIN
      Doc/RomWBW Architecture.pdf
  3. BIN
      Doc/RomWBW Disk Catalog.pdf
  4. BIN
      Doc/RomWBW Getting Started.pdf
  5. 11
      Source/Apps/Assign.asm
  6. 115
      Source/Apps/Tune/Tune.asm
  7. 54
      Source/Apps/Tune/cli.inc
  8. 8
      Source/CBIOS/cbios.asm
  9. 35
      Source/CPM3/diskio.z80
  10. 4
      Source/CPM3/genbnk.dat
  11. 5
      Source/CPM3/loader.asm
  12. 20
      Source/Doc/Applications.md
  13. 38
      Source/Doc/Architecture.md
  14. 2
      Source/HBIOS/audio.inc
  15. 45
      Source/HBIOS/ay38910.asm
  16. 30
      Source/HBIOS/cfg_state.inc
  17. 5
      Source/ZPM3/loader.asm
  18. 2
      Source/ver.inc
  19. 2
      Source/ver.lib

BIN
Doc/RomWBW Applications.pdf

Binary file not shown.

BIN
Doc/RomWBW Architecture.pdf

Binary file not shown.

BIN
Doc/RomWBW Disk Catalog.pdf

Binary file not shown.

BIN
Doc/RomWBW Getting Started.pdf

Binary file not shown.

11
Source/Apps/Assign.asm

@ -26,6 +26,7 @@
; 2020-04-29 [WBW] Updated for larger DPH (16 -> 20 bytes) ; 2020-04-29 [WBW] Updated for larger DPH (16 -> 20 bytes)
; 2020-05-06 [WBW] Add patch level to version compare ; 2020-05-06 [WBW] Add patch level to version compare
; 2020-05-10 [WBW] Set media change flag in XDPH for CP/M 3 ; 2020-05-10 [WBW] Set media change flag in XDPH for CP/M 3
; 2020-05-12 [WBW] Back out media change flag
;_______________________________________________________________________________ ;_______________________________________________________________________________
; ;
; ToDo: ; ToDo:
@ -778,10 +779,10 @@ instc2:
inc hl ; bump to slice field of DPH field inc hl ; bump to slice field of DPH field
ld a,(de) ; get slice from mapwrk ld a,(de) ; get slice from mapwrk
ld (hl),a ; put slice into DPH field ld (hl),a ; put slice into DPH field
ld a,11 ; media byte is 11 bytes ahead
call addhl ; bump HL to media byte adr
or $FF ; use $FF to signify media change
ld (hl),a ; set media flag byte
; ld a,11 ; media byte is 11 bytes ahead
; call addhl ; bump HL to media byte adr
; or $FF ; use $FF to signify media change
; ld (hl),a ; set media flag byte
inc de ; bump to next mapwrk entry inc de ; bump to next mapwrk entry
inc de ; ... inc de ; ...
inc de ; ... inc de ; ...
@ -1892,7 +1893,7 @@ stack .equ $ ; stack top
; Messages ; Messages
; ;
indent .db " ",0 indent .db " ",0
msgban1 .db "ASSIGN v1.3 for RomWBW CP/M, 10-May-2020",0
msgban1 .db "ASSIGN v1.4 for RomWBW CP/M, 12-May-2020",0
msghb .db " (HBIOS Mode)",0 msghb .db " (HBIOS Mode)",0
msgub .db " (UBIOS Mode)",0 msgub .db " (UBIOS Mode)",0
msgban2 .db "Copyright 2020, Wayne Warthen, GNU GPL v3",0 msgban2 .db "Copyright 2020, Wayne Warthen, GNU GPL v3",0

115
Source/Apps/Tune/Tune.asm

@ -95,6 +95,7 @@ Id .EQU 1 ; 5) Insert official identificator
CALL CLI_ABRT_IF_OPT_FIRST CALL CLI_ABRT_IF_OPT_FIRST
CALL CLI_HAVE_HBIOS_SWITCH CALL CLI_HAVE_HBIOS_SWITCH
CALL CLI_OCTAVE_ADJST
JP CONTINUE JP CONTINUE
CONTINUE: CONTINUE:
@ -581,14 +582,14 @@ FILTYP .DB 0 ; Sound file type (TYPPT2, TYPPT3, TYPMYM)
; ;
TMP .DB 0 ; work around use of undocumented Z80 TMP .DB 0 ; work around use of undocumented Z80
HBIOSOPT: .DB "--HBIOS", 0
HBIOSMD .DB 0 ; NON-ZERO IF USING HBIOS SOUND DRIVER, ZERO OTHERWISE HBIOSMD .DB 0 ; NON-ZERO IF USING HBIOS SOUND DRIVER, ZERO OTHERWISE
OCTAVEADJ .DB 0 ; AMOUNT TO ADJUST OCTAVE UP OR DOWN
MSGBAN .DB "Tune Player for RomWBW v3.1, 25-Apr-2020",0 MSGBAN .DB "Tune Player for RomWBW v3.1, 25-Apr-2020",0
MSGUSE .DB "Copyright (C) 2020, Wayne Warthen, GNU GPL v3",13,10 MSGUSE .DB "Copyright (C) 2020, Wayne Warthen, GNU GPL v3",13,10
.DB "PTxPlayer Copyright (C) 2004-2007 S.V.Bulba",13,10 .DB "PTxPlayer Copyright (C) 2004-2007 S.V.Bulba",13,10
.DB "MYMPlay by Marq/Lieves!Tuore",13,10,13,10 .DB "MYMPlay by Marq/Lieves!Tuore",13,10,13,10
.DB "Usage: TUNE <filename>.[PT2|PT3|MYM] [--hbios]",0
.DB "Usage: TUNE <filename>.[PT2|PT3|MYM] [--hbios] [+tn|-tn]",0
MSGBIO .DB "Incompatible BIOS or version, " MSGBIO .DB "Incompatible BIOS or version, "
.DB "HBIOS v", '0' + RMJ, ".", '0' + RMN, " required",0 .DB "HBIOS v", '0' + RMJ, ".", '0' + RMN, " required",0
MSGPLT .DB "Hardware error, system not supported!",0 MSGPLT .DB "Hardware error, system not supported!",0
@ -2003,74 +2004,74 @@ LOUT2 CALL NORMIO
RET ; AND DONE RET ; AND DONE
PLAYVIAHBIOS: PLAYVIAHBIOS:
;
; CHANNEL 0 (LEFT)
;
LD BC, (BF_SNDVOL*256)+0 ; SET VOLUME
LD A, (AYREGS + AmplA) ; DEVICE 0
ADD A,A ; GET 4-BIT
; CHANNEL 0
LD HL, AYREGS + AmplA
LD DE, AYREGS + TonA
LD B, 0
CALL PLAYNOTE
;
; CHANNEL 1
LD HL, AYREGS + AmplB
LD DE, AYREGS + TonB
LD B, 1
CALL PLAYNOTE
; CHANNEL 2
LD HL, AYREGS + AmplC
LD DE, AYREGS + TonC
LD B, 2
JP PLAYNOTE
PLAYNOTE:
PUSH BC ; CHANNEL IN B
PUSH DE ; PERIOD ADDR IN DE
LD A, (HL)
ADD A,A ; GET 4-BIT
ADD A,A ; VOLUME 0-15 ADD A,A ; VOLUME 0-15
ADD A,A ; AND CONVERT ADD A,A ; AND CONVERT
ADD A,A ; TO HBIOS
ADD A,A ; TO HBIOS
LD L, A ; RANGE 0-255 LD L, A ; RANGE 0-255
LD BC, (BF_SNDVOL*256)+0 ; SET VOLUME
RST 08 RST 08
; ;
LD BC, (BF_SNDPRD*256)+0 ; SET PERIOD
LD HL, (AYREGS+TonA) ; DEVICE 0
POP HL ; RESTORE PERIOD ADDR
LD A, (HL) ; DEVICE 0
INC HL
LD H, (HL)
LD L, A
LD A, H ; GET 12-BIT ONE PERIOD LD A, H ; GET 12-BIT ONE PERIOD
AND $0F ; MASK OFF HIGH AND $0F ; MASK OFF HIGH
LD H, A ; NIBBLE
RST 08
;
LD BC, (BF_SNDPLAY*256)+0 ; PLAY
LD D, 0 ; DEVICE 0
RST 08 ; CHANNEL 0
;
; CHANNEL 1 (MIDDLE)
;
LD BC, (BF_SNDVOL*256)+0 ; SET VOLUME
LD A, (AYREGS + AmplB) ; DEVICE 0
ADD A,A ; GET 4-BIT
ADD A,A ; VOLUME 0-15
ADD A,A ; AND CONVERT
ADD A,A ; TO HBIOS
LD L, A ; RANGE 0-255
RST 08
;
LD H, A ; NIBBLE
LD A, (OCTAVEADJ)
OR A
JR Z, PLAYNOTE3 ; NO OCTAVE ADJUSTMENT
BIT 7, A
JR Z, PLAYNOTE2 ; OCTAVE DOWN ADJUSTMENT
PLAYNOTE1:
ADD HL, HL ; MULTIPLE BY 2 FOR EACH OCTAVE
INC A
JR NZ, PLAYNOTE1
JR PLAYNOTE3
PLAYNOTE2:
SRL H ; DIVIDE BY 2 FOR EACH OCTAVE
RR L
DEC A
JR NZ, PLAYNOTE2
PLAYNOTE3
LD BC, (BF_SNDPRD*256)+0 ; SET PERIOD LD BC, (BF_SNDPRD*256)+0 ; SET PERIOD
LD HL, (AYREGS+TonB) ; DEVICE 0
ld A, H ; GET 12-BIT ONE PERIOD
AND $0F ; MASK OFF HIGH
LD H, A ; NIBBLE
RST 08 RST 08
; ;
POP DE ; RESTORE CHANNEL IN D (FROM B)
LD BC, (BF_SNDPLAY*256)+0 ; PLAY LD BC, (BF_SNDPLAY*256)+0 ; PLAY
LD D, 1 ; DEVICE 0
RST 08 ; CHANNEL 0
;
; CHANNEL 2 (RIGHT)
;
LD BC, (BF_SNDVOL*256)+0 ; SET VOLUME
LD A, (AYREGS + AmplC) ; DEVICE 0
ADD A,A ; GET 4-BIT
ADD A,A ; VOLUME 0-15
ADD A,A ; AND CONVERT
ADD A,A ; TO HBIOS
LD L, A ; RANGE 0-255
RST 08 RST 08
;
LD BC, (BF_SNDPRD*256)+0 ; SET PERIOD
LD HL, (AYREGS+TonC) ; DEVICE 0
LD A, H ; GET 12-BIT ONE PERIOD
AND $0F ; MASK OFF HIGH
LD H, A ; NIBBLE
RST 08
;
LD BC, (BF_SNDPLAY*256)+0 ; PLAY
LD D, 2 ; DEVICE 0
RST 08 ; CHANNEL 0
RET RET
#ENDIF #ENDIF
#IF ACBBAC #IF ACBBAC

54
Source/Apps/Tune/cli.inc

@ -1,5 +1,4 @@
CLI_ABRT_IF_OPT_FIRST: CLI_ABRT_IF_OPT_FIRST:
LD A, (FCB+1) LD A, (FCB+1)
CP '-' ; OPTION FIRST OR - MISSING FILENAME? CP '-' ; OPTION FIRST OR - MISSING FILENAME?
@ -11,7 +10,7 @@ CLI_HAVE_HBIOS_SWITCH:
LD DE, HBIOSOPT LD DE, HBIOSOPT
CALL STRINDEX CALL STRINDEX
JR NZ, CLI_HAVE_HBIOS_SWITCH1 JR NZ, CLI_HAVE_HBIOS_SWITCH1
OR $FF ; MATCHED --HBIOS
OR $FF ; MATCHED --HBIOS
LD (HBIOSMD), A LD (HBIOSMD), A
LD BC,(BF_SYSGET*256)+BF_SND LD BC,(BF_SYSGET*256)+BF_SND
RST 08 ; CHECK WE HAVE RST 08 ; CHECK WE HAVE
@ -35,4 +34,53 @@ CLI_ABRT_UNSUPPFILTYP:
CLI_ABRT_UNSUPPFILTYP1: CLI_ABRT_UNSUPPFILTYP1:
POP AF POP AF
RET
RET
CLI_OCTAVE_ADJST: ; SEARCH FOR OCTAVE ADJUSTMENT SWITCH (-n or +n)
LD HL, CLIARGS ; TEST FOR --HBIOS ON COMMAND LINE
LD DE, DOWN1
CALL STRINDEX
JR NZ, CLI_OCTAVE_ADJST1
LD A, -1
JR CLI_OCTAVE_ADJST5
CLI_OCTAVE_ADJST1:
LD HL, CLIARGS ; TEST FOR --HBIOS ON COMMAND LINE
LD DE, DOWN2
CALL STRINDEX
JR NZ, CLI_OCTAVE_ADJST2
LD A, -2
JR CLI_OCTAVE_ADJST5
CLI_OCTAVE_ADJST2:
LD HL, CLIARGS ; TEST FOR --HBIOS ON COMMAND LINE
LD DE, UP1
CALL STRINDEX
JR NZ, CLI_OCTAVE_ADJST3
LD A, 1
JR CLI_OCTAVE_ADJST5
CLI_OCTAVE_ADJST3:
LD HL, CLIARGS ; TEST FOR --HBIOS ON COMMAND LINE
LD DE, UP2
CALL STRINDEX
JR NZ, CLI_OCTAVE_ADJST4
LD A, 2
JR CLI_OCTAVE_ADJST5
CLI_OCTAVE_ADJST4:
LD A, 0
CLI_OCTAVE_ADJST5:
LD (OCTAVEADJ), A
RET
HBIOSOPT: .DB "--HBIOS", 0
DOWN1 .DB "-t1", 0 ; DOWN AN OCTAVE
DOWN2 .DB "-t2", 0 ; DOWN TWO OCTAVE
UP1 .DB "+t1", 0 ; UP AN OCTAVE
UP2 .DB "+t2", 0 ; UP TWO OCTAVE

8
Source/CBIOS/cbios.asm

@ -1358,6 +1358,8 @@ DSK_MBR0:
; ;
#IFDEF PLTWBW #IFDEF PLTWBW
; SWITCH TO BIOS BANK TO ACCESS DISK BUFFER ; SWITCH TO BIOS BANK TO ACCESS DISK BUFFER
LD (STKSAV),SP ; SAVE CUR STACK
LD SP,XSTACK ; NEW STACK IN HI MEM
LD A,(HB_CURBNK) ; GET CUR BANK LD A,(HB_CURBNK) ; GET CUR BANK
PUSH AF ; SAVE CUR BANK PUSH AF ; SAVE CUR BANK
LD A,(BNKBIOS) ; BIOS BANK LD A,(BNKBIOS) ; BIOS BANK
@ -1370,7 +1372,12 @@ DSK_MBR0:
LD A,H ; PREV BANK TO A LD A,H ; PREV BANK TO A
CALL HB_BNKSEL ; SELECT IT CALL HB_BNKSEL ; SELECT IT
POP AF ; ORIGINAL RESULT BACK POP AF ; ORIGINAL RESULT BACK
LD SP,(STKSAV) ; RESTORE ORIGINAL STACK
RET RET
.FILL 32,0
XSTACK .EQU $
#ENDIF #ENDIF
; ;
DSK_MBR1: DSK_MBR1:
@ -1700,6 +1707,7 @@ CCPBUF .DW 0 ; ADDRESS OF CCP BUF IN BIOS BANK
MEDID .DB 0 ; TEMP STORAGE FOR MEDIA ID MEDID .DB 0 ; TEMP STORAGE FOR MEDIA ID
SLICE .DB 0 ; CURRENT SLICE SLICE .DB 0 ; CURRENT SLICE
SPS .DW 0 ; SECTORS PER SLICE SPS .DW 0 ; SECTORS PER SLICE
STKSAV .DW 0 ; TEMP SAVED STACK POINTER
; ;
#IFDEF PLTWBW #IFDEF PLTWBW
BNKBIOS .DB 0 ; BIOS BANK ID BNKBIOS .DB 0 ; BIOS BANK ID

35
Source/CPM3/diskio.z80

@ -191,7 +191,7 @@ dpb$max:
db 5 ; bsh: block shift factor db 5 ; bsh: block shift factor
db 31 ; blm: block mask db 31 ; blm: block mask
db 1 ; exm: extent mask db 1 ; exm: extent mask
dw 2047 ; dsm: total storage in blocks - 1 = (8mb / 4k bls) - 1 = 2047
dw 2048 - 1 ; dsm: total storage in blocks - 1 = (8mb / 4k bls) - 1 = 2047
dw 1024 - 1 ; drm: dir entries - 1 dw 1024 - 1 ; drm: dir entries - 1
db 11111111b ; al0: dir blk bit map, first byte db 11111111b ; al0: dir blk bit map, first byte
db 00000000b ; al1: dir blk bit map, second byte db 00000000b ; al1: dir blk bit map, second byte
@ -211,7 +211,7 @@ dpb$rom: ; 384K ROM Drive
dw 256 - 1 ; drm: dir entries - 1 = 256 - 1 = 255 dw 256 - 1 ; drm: dir entries - 1 = 256 - 1 = 255
db 11110000b ; al0: dir blk bit map, first byte db 11110000b ; al0: dir blk bit map, first byte
db 00000000b ; al1: dir blk bit map, second byte db 00000000b ; al1: dir blk bit map, second byte
dw 8000h ; cks: directory check vector size - permanent storage = 8000H
dw 8040h ; cks: directory check vector size - permanent storage = 8000H
dw 0 ; off: reserved tracks = 16 trks * (16 trks * 16 heads * 16 secs * 512 bytes) = 128k dw 0 ; off: reserved tracks = 16 trks * (16 trks * 16 heads * 16 secs * 512 bytes) = 128k
db 2 ; psh: 2 for 512 byte sectors db 2 ; psh: 2 for 512 byte sectors
db 3 ; phm: (512 / 128) - 1 db 3 ; phm: (512 / 128) - 1
@ -226,7 +226,7 @@ dpb$ram: ; 256K RAM Drive
dw 256 - 1 ; drm: dir entries - 1 = 256 - 1 = 255 dw 256 - 1 ; drm: dir entries - 1 = 256 - 1 = 255
db 11110000b ; al0: dir blk bit map, first byte db 11110000b ; al0: dir blk bit map, first byte
db 00000000b ; al1: dir blk bit map, second byte db 00000000b ; al1: dir blk bit map, second byte
dw 8000h ; cks: directory check vector size - permanent storage = 8000H
dw 8040h ; cks: directory check vector size - permanent storage = 8000H
dw 0 ; off: reserved tracks = 16 trks * (16 trks * 16 heads * 16 secs * 512 bytes) = 128k dw 0 ; off: reserved tracks = 16 trks * (16 trks * 16 heads * 16 secs * 512 bytes) = 128k
db 2 ; psh: 2 for 512 byte sectors db 2 ; psh: 2 for 512 byte sectors
db 3 ; phm: (512 / 128) - 1 db 3 ; phm: (512 / 128) - 1
@ -236,11 +236,11 @@ dpb$rf: ; 4MB RAM Floppy Drive
db 4 ; bsh: block shift factor db 4 ; bsh: block shift factor
db 15 ; blm: block mask db 15 ; blm: block mask
db 0 ; exm: extent mask db 0 ; exm: extent mask
dw 2047 ; dsm: total storage in blocks - 1 = (4mb / 2k bls) - 1 = 2047
dw 255 ; drm: dir entries - 1 = 256 - 1 = 255
dw 2048 - 1 ; dsm: total storage in blocks - 1 = (4mb / 2k bls) - 1 = 2047
dw 256 - 1 ; drm: dir entries - 1 = 256 - 1 = 255
db 11110000b ; al0: dir blk bit map, first byte db 11110000b ; al0: dir blk bit map, first byte
db 00000000b ; al1: dir blk bit map, second byte db 00000000b ; al1: dir blk bit map, second byte
dw 8000h ; cks: directory check vector size - permanent storage = 8000H
dw 8040h ; cks: directory check vector size - permanent storage = 8000H
dw 0 ; off: reserved tracks = 0 trks dw 0 ; off: reserved tracks = 0 trks
db 2 ; psh: 2 for 512 byte sectors db 2 ; psh: 2 for 512 byte sectors
db 3 ; phm: (512 / 128) - 1 db 3 ; phm: (512 / 128) - 1
@ -250,7 +250,7 @@ dpb$hd: ; 8MB Hard Disk Drive w/ 512 dir entries
db 5 ; bsh: block shift factor db 5 ; bsh: block shift factor
db 31 ; blm: block mask db 31 ; blm: block mask
db 1 ; exm: extent mask db 1 ; exm: extent mask
dw 2047 ; dsm: total storage in blocks - 1 = (8mb / 4k bls) - 1 = 2047
dw 2048 - 1 ; dsm: total storage in blocks - 1 = (8mb / 4k bls) - 1 = 2047
dw 512 - 1 ; drm: dir entries - 1 = 512 - 1 = 511 dw 512 - 1 ; drm: dir entries - 1 = 512 - 1 = 511
db 11110000b ; al0: dir blk bit map, first byte db 11110000b ; al0: dir blk bit map, first byte
db 00000000b ; al1: dir blk bit map, second byte db 00000000b ; al1: dir blk bit map, second byte
@ -264,8 +264,8 @@ dpb$fd720: ; 3.5" DS/DD Floppy Drive (720K)
db 4 ; bsh: block shift factor db 4 ; bsh: block shift factor
db 15 ; blm: block mask db 15 ; blm: block mask
db 0 ; exm: extent mask db 0 ; exm: extent mask
dw 350 ; dsm: total storage in blocks - 1 blk = ((720k - 18k off) / 2k bls) - 1 = 350
dw 127 ; drm: dir entries - 1 = 128 - 1 = 127
dw 351 - 1 ; dsm: total storage in blocks - 1 blk = ((720k - 18k off) / 2k bls) - 1 = 350
dw 128 - 1 ; drm: dir entries - 1 = 128 - 1 = 127
db 11000000b ; al0: dir blk bit map, first byte db 11000000b ; al0: dir blk bit map, first byte
db 00000000b ; al1: dir blk bit map, second byte db 00000000b ; al1: dir blk bit map, second byte
dw 32 ; cks: directory check vector size = 128 / 4 dw 32 ; cks: directory check vector size = 128 / 4
@ -278,8 +278,8 @@ dpb_fd144: ; 3.5" DS/HD Floppy Drive (1.44M)
db 4 ; bsh: block shift factor db 4 ; bsh: block shift factor
db 15 ; blm: block mask db 15 ; blm: block mask
db 0 ; exm: extent mask db 0 ; exm: extent mask
dw 710 ; dsm: total storage in blocks - 1 blk = ((1,440k - 18k off) / 2k bls) - 1 = 710
dw 255 ; drm: dir entries - 1 = 256 - 1 = 255
dw 711 - 1 ; dsm: total storage in blocks - 1 blk = ((1,440k - 18k off) / 2k bls) - 1 = 710
dw 256 - 1 ; drm: dir entries - 1 = 256 - 1 = 255
db 11110000b ; al0: dir blk bit map, first byte db 11110000b ; al0: dir blk bit map, first byte
db 00000000b ; al1: dir blk bit map, second byte db 00000000b ; al1: dir blk bit map, second byte
dw 64 ; cks: directory check vector size = 256 / 4 dw 64 ; cks: directory check vector size = 256 / 4
@ -292,8 +292,8 @@ dpb_fd360: ; 5.25" DS/DD Floppy Drive (360K)
db 4 ; bsh: block shift factor db 4 ; bsh: block shift factor
db 15 ; blm: block mask db 15 ; blm: block mask
db 1 ; exm: extent mask db 1 ; exm: extent mask
dw 170 ; dsm: total storage in blocks - 1 blk = ((360k - 18k off) / 2k bls) - 1 = 170
dw 127 ; drm: dir entries - 1 = 128 - 1 = 127
dw 171 - 1 ; dsm: total storage in blocks - 1 blk = ((360k - 18k off) / 2k bls) - 1 = 170
dw 128 - 1 ; drm: dir entries - 1 = 128 - 1 = 127
db 11110000b ; al0: dir blk bit map, first byte db 11110000b ; al0: dir blk bit map, first byte
db 00000000b ; al1: dir blk bit map, second byte db 00000000b ; al1: dir blk bit map, second byte
dw 32 ; cks: directory check vector size = 128 / 4 dw 32 ; cks: directory check vector size = 128 / 4
@ -306,8 +306,8 @@ dpb_fd120: ; 5.25" DS/HD Floppy Drive (1.2M)
db 4 ; bsh: block shift factor db 4 ; bsh: block shift factor
db 15 ; blm: block mask db 15 ; blm: block mask
db 0 ; exm: extent mask db 0 ; exm: extent mask
dw 591 ; dsm: total storage in blocks - 1 blk = ((1,200k - 15k off) / 2k bls) - 1 = 591
dw 255 ; drm: dir entries - 1 = 256 - 1 = 255
dw 592 - 1 ; dsm: total storage in blocks - 1 blk = ((1,200k - 15k off) / 2k bls) - 1 = 591
dw 256 - 1 ; drm: dir entries - 1 = 256 - 1 = 255
db 11110000b ; al0: dir blk bit map, first byte db 11110000b ; al0: dir blk bit map, first byte
db 00000000b ; al1: dir blk bit map, second byte db 00000000b ; al1: dir blk bit map, second byte
dw 64 ; cks: directory check vector size = 256 / 4 dw 64 ; cks: directory check vector size = 256 / 4
@ -320,8 +320,8 @@ dpb_fd111: ; 8" DS/DD Floppy Drive (1.11M)
db 4 ; bsh: block shift factor db 4 ; bsh: block shift factor
db 15 ; blm: block mask db 15 ; blm: block mask
db 0 ; exm: extent mask db 0 ; exm: extent mask
dw 569 ; dsm: total storage in blocks - 1 blk = ((1,155k - 15k off) / 2k bls) - 1 = 569
dw 255 ; drm: dir entries - 1 = 256 - 1 = 255
dw 570 - 1 ; dsm: total storage in blocks - 1 blk = ((1,155k - 15k off) / 2k bls) - 1 = 569
dw 256 - 1 ; drm: dir entries - 1 = 256 - 1 = 255
db 11110000b ; al0: dir blk bit map, first byte db 11110000b ; al0: dir blk bit map, first byte
db 00000000b ; al1: dir blk bit map, second byte db 00000000b ; al1: dir blk bit map, second byte
dw 64 ; cks: directory check vector size = 256 / 4 dw 64 ; cks: directory check vector size = 256 / 4
@ -650,6 +650,7 @@ dsk$rw$retry:
jr dsk$rw9 ; do the disk I/O jr dsk$rw9 ; do the disk I/O
dsk$rw2: dsk$rw2:
; LBA I/O
push de ; save hiword of LBA push de ; save hiword of LBA
push hl ; save loword of LBA push hl ; save loword of LBA

4
Source/CPM3/genbnk.dat

@ -57,7 +57,7 @@ ALTBNKSM = Y
ALTBNKSN = Y ALTBNKSN = Y
ALTBNKSO = Y ALTBNKSO = Y
ALTBNKSP = Y ALTBNKSP = Y
NDIRRECA = 02
NDIRRECA = 08
NDIRRECB = 00 NDIRRECB = 00
NDIRRECC = 00 NDIRRECC = 00
NDIRRECD = 00 NDIRRECD = 00
@ -73,7 +73,7 @@ NDIRRECM = 00
NDIRRECN = 00 NDIRRECN = 00
NDIRRECO = 00 NDIRRECO = 00
NDIRRECP = 00 NDIRRECP = 00
NDTARECA = 02
NDTARECA = 10
NDTARECB = 00 NDTARECB = 00
NDTARECC = 00 NDTARECC = 00
NDTARECD = 00 NDTARECD = 00

5
Source/CPM3/loader.asm

@ -27,9 +27,12 @@
; ;
#INCLUDE "../ver.inc" #INCLUDE "../ver.inc"
; ;
; BELOW, SYS_END MUST BE SET TO THE SIZE OF CPMLDR.BIN + SYS_LOC. IF
; THE SIZE OF CPMLDR.BIN CHANGES, SYS_END MUST BE UPDATED!!!
;
SYS_ENT .EQU $0100 ; SYSTEM (OS) ENTRY POINT ADDRESS SYS_ENT .EQU $0100 ; SYSTEM (OS) ENTRY POINT ADDRESS
SYS_LOC .EQU $0100 ; STARTING ADDRESS TO LOAD SYSTEM IMAGE SYS_LOC .EQU $0100 ; STARTING ADDRESS TO LOAD SYSTEM IMAGE
SYS_END .EQU $1480 ; ENDING ADDRESS OF SYSTEM IMAGE
SYS_END .EQU $1580 + SYS_LOC ; ENDING ADDRESS OF SYSTEM IMAGE
; ;
SEC_SIZE .EQU 512 ; DISK SECTOR SIZE SEC_SIZE .EQU 512 ; DISK SECTOR SIZE
BLK_SIZE .EQU 128 ; OS BLOCK/RECORD SIZE BLK_SIZE .EQU 128 ; OS BLOCK/RECORD SIZE

20
Source/Doc/Applications.md

@ -949,6 +949,24 @@ accurately pace the sound file output. If no system timer is
available, a delay loop is calculated instead. The delay loop will not available, a delay loop is calculated instead. The delay loop will not
be as accurate as the system timer. be as accurate as the system timer.
There are two modes of operations. A direct hardware interface for the
AY-3-8910 or YM2149 chips, or a compatibility layer thru HBIOS supporting
the SN76489 chip.
By default the application will attempt to interface directly to the sound
chip. The optional argument `--hbios` supplied after the filename, will
enable the application to use the HBIOS sound driver.
The HBIOS mode also support other switch as desribed below.
| Switch | Description |
| ----------- | ------------------------------------------------------ |
| `--hbios` | Utilise HBIOS' sound driver |
| `+t1` | Play tune an octave higher |
| `+t2` | Play tune two octaves higher |
| `-t1` | Play tune an octave lower |
| `-t2` | Play tune two octaves lower |
All RomWBW operating system boot disks include a selection of sound All RomWBW operating system boot disks include a selection of sound
files in user area 3. files in user area 3.
@ -960,4 +978,4 @@ software was adapted and embedded from pre-existing sources. The YM
player code is from MYMPLAY 0.4 by Lieves!Tuore and the PT player code player code is from MYMPLAY 0.4 by Lieves!Tuore and the PT player code
is (c)2004-2007 S.V.Bulba <vorobey@mail.khstu.ru>. is (c)2004-2007 S.V.Bulba <vorobey@mail.khstu.ru>.
The source code is provided in the RomWBW distribution.
The source code is provided in the RomWBW distribution.

38
Source/Doc/Architecture.md

@ -1392,20 +1392,38 @@ supplied is beyond driver capabilities, register A will be set to $FF.
| _Entry Parameters_ | _Entry Parameters_
| B: 0x53 | B: 0x53
| C: Audio Device Unit ID | C: Audio Device Unit ID
| L: Note (0 to 255 quarter notes)
| HL: Value of note to play
| _Returned Values_ | _Returned Values_
| A: Status (0=OK, else error) | A: Status (0=OK, else error)
This function sets the sound chip period parameter according to
standardized notes.
The value corresponds to standard musical notes. The value allows
for selection of a quarter of a semitone by giving a value between 0
and up to the drivers maximum supported value. The lowest note is (0).
For the SN76489 chip, 0 corresponds to note A1# and the value 249 is
the maximum supported value, and it corresponds to note C7.
This function sets the sound chip period parameter with steps of quarter
of a semitone. The value of 0 (lowest) corresponds to Bb/A# in octave 0.
Increase by steps of 4 to select the next corresponding note.
Increase by steps of 48 to select the same note in next octave.
If the driver is able to generate the requested note, a success (0) is
returned, otherwise a non-zero error state will be returned.
The following table shows the mapping of the input value in HL
to the corresponding octave and note.
| Note | Octave 0 | Octave 1 | Octave 2 | Octave 3 | Octave 4 | Octave 5 | Octave 6 |
|-------|----------|----------|----------|----------|----------|----------|----------|
| Bb/A# | 0 | 48 | 96 | 144 | 192 | 240 | 288 |
| B | 4 | 52 | 100 | 148 | 196 | 244 | 292 |
| C | 8 | 56 | 104 | 152 | 200 | 248 | 296 |
| C#/Db | 12 | 60 | 108 | 156 | 204 | 252 | 300 |
| D | 16 | 64 | 112 | 160 | 208 | 256 | 304 |
| Eb/D# | 20 | 68 | 116 | 164 | 212 | 260 | 308 |
| E | 24 | 72 | 120 | 168 | 216 | 264 | 312 |
| F | 28 | 76 | 124 | 172 | 220 | 268 | 316 |
| F#/Gb | 32 | 80 | 128 | 176 | 224 | 272 | 320 |
| G | 36 | 84 | 132 | 180 | 228 | 276 | 324 |
| Ab/G# | 40 | 88 | 136 | 184 | 232 | 280 | 328 |
| A | 44 | 92 | 140 | 188 | 236 | 284 | 332 |
### Function 0x54 -- Sound Play (SNDPLAY) ### Function 0x54 -- Sound Play (SNDPLAY)

2
Source/HBIOS/audio.inc

@ -72,4 +72,4 @@ AUD_NOTE2:
LD H, $FF ; OTHERWISE RETURN -1 PERIOD (ERROR) LD H, $FF ; OTHERWISE RETURN -1 PERIOD (ERROR)
LD L, $FF LD L, $FF
RET RET
#ENDIF
#ENDIF

45
Source/HBIOS/ay38910.asm

@ -4,6 +4,10 @@
; ;
;====================================================================== ;======================================================================
; ;
#include "cfg_state.inc"
AY_RCSND .EQU 0 ; 0 = EB MODULE, 1=MF MODULE AY_RCSND .EQU 0 ; 0 = EB MODULE, 1=MF MODULE
; ;
#IF (AYMODE == AYMODE_SCG) #IF (AYMODE == AYMODE_SCG)
@ -123,13 +127,46 @@ AY_FND: LD IY, AY_IDAT ; SETUP FUNCTION TABLE
LD DE,(AY_R3CHBP*256)+$00 LD DE,(AY_R3CHBP*256)+$00
CALL AY_WRTPSG ; R03 = $00 = XXXX0000 CALL AY_WRTPSG ; R03 = $00 = XXXX0000
; ;
CALL LDELAY ; HALF SECOND DELAY
;
LD E,$00 ; SET VOLUME OFF
CALL AY_SETV ; ON ALL CHANNELS
#IF SYSTIMEN
LD A, TICKFREQ / 3 ; SCHEDULE IN 1/3 SECOND TO TURN OFF SOUND
LD (AY_TIMTIK), A
LD HL, (VEC_TICK + 1) ; GET CUR SECONDS VECTOR
LD (AY_TIMHOOK), HL ; SAVE IT INTERNALLY
LD HL, AY_TIMER ; INSTALL TIMER HOOK HANDLER
LD (VEC_TICK + 1), HL
#ELSE
CALL LDELAY ; HALF SECOND DELAY
LD E,$00 ; SET VOLUME OFF
CALL AY_SETV ; ON ALL CHANNELS
#ENDIF
; ;
XOR A ; SUCCESSFULL INIT XOR A ; SUCCESSFULL INIT
RET RET
#IF SYSTIMEN
AY_TIMER:
LD A, (AY_TIMTIK)
DEC A
LD (AY_TIMTIK), A
JR NZ, AY_TIMER1
LD HL, (AY_TIMHOOK) ; REMOVE US FROM THE TIMER HOOKS LIST
LD (VEC_TICK + 1), HL
LD E,$00 ; SET VOLUME OFF
CALL AY_SETV ; ON ALL CHANNELS
AY_TIMER1:
JP 0 ; OVERWRITTEN WITH NEXT HANDLER
AY_TIMHOOK: .EQU $ - 2
AY_TIMTIK .DB 0 ; COUNT DOWN TO FINISH BOOT BEEP
#ENDIF
; ;
;====================================================================== ;======================================================================
; INITIALIZE DEVICE ; INITIALIZE DEVICE

30
Source/HBIOS/cfg_state.inc

@ -0,0 +1,30 @@
#IFNDEF CFG_STATE
#DEFINE CFG_STATE
SYSTIMEN .EQU FALSE
#IF (CTCENABLE & INTMODE == 2 & CTCTIMER)
SYSTIMEN .SET TRUE
#ENDIF
#IF (TMSENABLE & INTMODE == 1 & TMSTIMENABLE)
SYSTIMEN .SET TRUE
#ENDIF
#IF (INTMODE == 1 & PLATFORM == PLT_SBC & HTIMENABLE)
SYSTIMEN .SET TRUE
#ENDIF
#IF (INTMODE == 2 & CPUFAM == CPU_Z180)
SYSTIMEN .SET TRUE
#ENDIF
.ECHO "TIMER INTERRUPT "
#IF SYSTIMEN
.ECHO "ACTIVE\n"
#ELSE
.ECHO "NOT ACTIVE\n"
#ENDIF
#ENDIF

5
Source/ZPM3/loader.asm

@ -27,9 +27,12 @@
; ;
#INCLUDE "../ver.inc" #INCLUDE "../ver.inc"
; ;
; BELOW, SYS_END MUST BE SET TO THE SIZE OF CPMLDR.BIN + SYS_LOC. IF
; THE SIZE OF CPMLDR.BIN CHANGES, SYS_END MUST BE UPDATED!!!
;
SYS_ENT .EQU $0100 ; SYSTEM (OS) ENTRY POINT ADDRESS SYS_ENT .EQU $0100 ; SYSTEM (OS) ENTRY POINT ADDRESS
SYS_LOC .EQU $0100 ; STARTING ADDRESS TO LOAD SYSTEM IMAGE SYS_LOC .EQU $0100 ; STARTING ADDRESS TO LOAD SYSTEM IMAGE
SYS_END .EQU $1480 ; ENDING ADDRESS OF SYSTEM IMAGE
SYS_END .EQU $1580 + SYS_LOC ; ENDING ADDRESS OF SYSTEM IMAGE
; ;
SEC_SIZE .EQU 512 ; DISK SECTOR SIZE SEC_SIZE .EQU 512 ; DISK SECTOR SIZE
BLK_SIZE .EQU 128 ; OS BLOCK/RECORD SIZE BLK_SIZE .EQU 128 ; OS BLOCK/RECORD SIZE

2
Source/ver.inc

@ -2,4 +2,4 @@
#DEFINE RMN 1 #DEFINE RMN 1
#DEFINE RUP 1 #DEFINE RUP 1
#DEFINE RTP 0 #DEFINE RTP 0
#DEFINE BIOSVER "3.1.1-pre.7"
#DEFINE BIOSVER "3.1.1-pre.8"

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 1
rup equ 1 rup equ 1
rtp equ 0 rtp equ 0
biosver macro biosver macro
db "3.1.1-pre.7"
db "3.1.1-pre.8"
endm endm

Loading…
Cancel
Save