diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index dcf863fc..0837e86f 100644 Binary files a/Doc/RomWBW Applications.pdf and b/Doc/RomWBW Applications.pdf differ diff --git a/Doc/RomWBW Architecture.pdf b/Doc/RomWBW Architecture.pdf index 8a116e0a..3ca943e0 100644 Binary files a/Doc/RomWBW Architecture.pdf and b/Doc/RomWBW Architecture.pdf differ diff --git a/Doc/RomWBW Disk Catalog.pdf b/Doc/RomWBW Disk Catalog.pdf index eb0583ed..aa9400af 100644 Binary files a/Doc/RomWBW Disk Catalog.pdf and b/Doc/RomWBW Disk Catalog.pdf differ diff --git a/Doc/RomWBW Getting Started.pdf b/Doc/RomWBW Getting Started.pdf index 65d14983..da962bbd 100644 Binary files a/Doc/RomWBW Getting Started.pdf and b/Doc/RomWBW Getting Started.pdf differ diff --git a/Source/Apps/Assign.asm b/Source/Apps/Assign.asm index c6214c65..c080991b 100644 --- a/Source/Apps/Assign.asm +++ b/Source/Apps/Assign.asm @@ -26,6 +26,7 @@ ; 2020-04-29 [WBW] Updated for larger DPH (16 -> 20 bytes) ; 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-12 [WBW] Back out media change flag ;_______________________________________________________________________________ ; ; ToDo: @@ -778,10 +779,10 @@ instc2: inc hl ; bump to slice field of DPH field ld a,(de) ; get slice from mapwrk 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 ; ... inc de ; ... @@ -1892,7 +1893,7 @@ stack .equ $ ; stack top ; Messages ; 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 msgub .db " (UBIOS Mode)",0 msgban2 .db "Copyright 2020, Wayne Warthen, GNU GPL v3",0 diff --git a/Source/Apps/Tune/Tune.asm b/Source/Apps/Tune/Tune.asm index 79bb1aac..a6e4bfb4 100644 --- a/Source/Apps/Tune/Tune.asm +++ b/Source/Apps/Tune/Tune.asm @@ -95,6 +95,7 @@ Id .EQU 1 ; 5) Insert official identificator CALL CLI_ABRT_IF_OPT_FIRST CALL CLI_HAVE_HBIOS_SWITCH + CALL CLI_OCTAVE_ADJST JP CONTINUE CONTINUE: @@ -581,14 +582,14 @@ FILTYP .DB 0 ; Sound file type (TYPPT2, TYPPT3, TYPMYM) ; 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 +OCTAVEADJ .DB 0 ; AMOUNT TO ADJUST OCTAVE UP OR DOWN MSGBAN .DB "Tune Player for RomWBW v3.1, 25-Apr-2020",0 MSGUSE .DB "Copyright (C) 2020, Wayne Warthen, GNU GPL v3",13,10 .DB "PTxPlayer Copyright (C) 2004-2007 S.V.Bulba",13,10 .DB "MYMPlay by Marq/Lieves!Tuore",13,10,13,10 - .DB "Usage: TUNE .[PT2|PT3|MYM] [--hbios]",0 + .DB "Usage: TUNE .[PT2|PT3|MYM] [--hbios] [+tn|-tn]",0 MSGBIO .DB "Incompatible BIOS or version, " .DB "HBIOS v", '0' + RMJ, ".", '0' + RMN, " required",0 MSGPLT .DB "Hardware error, system not supported!",0 @@ -2003,74 +2004,74 @@ LOUT2 CALL NORMIO RET ; AND DONE 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 ; AND CONVERT - ADD A,A ; TO HBIOS + ADD A,A ; TO HBIOS LD L, A ; RANGE 0-255 + LD BC, (BF_SNDVOL*256)+0 ; SET VOLUME 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 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 HL, (AYREGS+TonB) ; DEVICE 0 - ld A, H ; GET 12-BIT ONE PERIOD - AND $0F ; MASK OFF HIGH - LD H, A ; NIBBLE RST 08 ; + POP DE ; RESTORE CHANNEL IN D (FROM B) 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 -; - 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 + #ENDIF #IF ACBBAC diff --git a/Source/Apps/Tune/cli.inc b/Source/Apps/Tune/cli.inc index 9f8b2551..fc901068 100644 --- a/Source/Apps/Tune/cli.inc +++ b/Source/Apps/Tune/cli.inc @@ -1,5 +1,4 @@ - CLI_ABRT_IF_OPT_FIRST: LD A, (FCB+1) CP '-' ; OPTION FIRST OR - MISSING FILENAME? @@ -11,7 +10,7 @@ CLI_HAVE_HBIOS_SWITCH: LD DE, HBIOSOPT CALL STRINDEX JR NZ, CLI_HAVE_HBIOS_SWITCH1 - OR $FF ; MATCHED --HBIOS + OR $FF ; MATCHED --HBIOS LD (HBIOSMD), A LD BC,(BF_SYSGET*256)+BF_SND RST 08 ; CHECK WE HAVE @@ -35,4 +34,53 @@ CLI_ABRT_UNSUPPFILTYP: CLI_ABRT_UNSUPPFILTYP1: POP AF - RET \ No newline at end of file + 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 diff --git a/Source/CBIOS/cbios.asm b/Source/CBIOS/cbios.asm index acaaa3df..a1036ccd 100644 --- a/Source/CBIOS/cbios.asm +++ b/Source/CBIOS/cbios.asm @@ -1358,6 +1358,8 @@ DSK_MBR0: ; #IFDEF PLTWBW ; 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 PUSH AF ; SAVE CUR BANK LD A,(BNKBIOS) ; BIOS BANK @@ -1370,7 +1372,12 @@ DSK_MBR0: LD A,H ; PREV BANK TO A CALL HB_BNKSEL ; SELECT IT POP AF ; ORIGINAL RESULT BACK + LD SP,(STKSAV) ; RESTORE ORIGINAL STACK RET + + .FILL 32,0 +XSTACK .EQU $ + #ENDIF ; DSK_MBR1: @@ -1700,6 +1707,7 @@ CCPBUF .DW 0 ; ADDRESS OF CCP BUF IN BIOS BANK MEDID .DB 0 ; TEMP STORAGE FOR MEDIA ID SLICE .DB 0 ; CURRENT SLICE SPS .DW 0 ; SECTORS PER SLICE +STKSAV .DW 0 ; TEMP SAVED STACK POINTER ; #IFDEF PLTWBW BNKBIOS .DB 0 ; BIOS BANK ID diff --git a/Source/CPM3/diskio.z80 b/Source/CPM3/diskio.z80 index 1856eefa..45df4372 100644 --- a/Source/CPM3/diskio.z80 +++ b/Source/CPM3/diskio.z80 @@ -191,7 +191,7 @@ dpb$max: db 5 ; bsh: block shift factor db 31 ; blm: block 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 db 11111111b ; al0: dir blk bit map, first 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 db 11110000b ; al0: dir blk bit map, first 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 db 2 ; psh: 2 for 512 byte sectors 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 db 11110000b ; al0: dir blk bit map, first 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 db 2 ; psh: 2 for 512 byte sectors db 3 ; phm: (512 / 128) - 1 @@ -236,11 +236,11 @@ dpb$rf: ; 4MB RAM Floppy Drive db 4 ; bsh: block shift factor db 15 ; blm: block 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 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 db 2 ; psh: 2 for 512 byte sectors 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 31 ; blm: block 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 db 11110000b ; al0: dir blk bit map, first 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 15 ; blm: block 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 00000000b ; al1: dir blk bit map, second byte 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 15 ; blm: block 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 00000000b ; al1: dir blk bit map, second byte 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 15 ; blm: block 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 00000000b ; al1: dir blk bit map, second byte 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 15 ; blm: block 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 00000000b ; al1: dir blk bit map, second byte 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 15 ; blm: block 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 00000000b ; al1: dir blk bit map, second byte dw 64 ; cks: directory check vector size = 256 / 4 @@ -650,6 +650,7 @@ dsk$rw$retry: jr dsk$rw9 ; do the disk I/O dsk$rw2: + ; LBA I/O push de ; save hiword of LBA push hl ; save loword of LBA diff --git a/Source/CPM3/genbnk.dat b/Source/CPM3/genbnk.dat index 060a2c79..7ece8384 100644 --- a/Source/CPM3/genbnk.dat +++ b/Source/CPM3/genbnk.dat @@ -57,7 +57,7 @@ ALTBNKSM = Y ALTBNKSN = Y ALTBNKSO = Y ALTBNKSP = Y -NDIRRECA = 02 +NDIRRECA = 08 NDIRRECB = 00 NDIRRECC = 00 NDIRRECD = 00 @@ -73,7 +73,7 @@ NDIRRECM = 00 NDIRRECN = 00 NDIRRECO = 00 NDIRRECP = 00 -NDTARECA = 02 +NDTARECA = 10 NDTARECB = 00 NDTARECC = 00 NDTARECD = 00 diff --git a/Source/CPM3/loader.asm b/Source/CPM3/loader.asm index ef80711d..42a8082d 100644 --- a/Source/CPM3/loader.asm +++ b/Source/CPM3/loader.asm @@ -27,9 +27,12 @@ ; #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_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 BLK_SIZE .EQU 128 ; OS BLOCK/RECORD SIZE diff --git a/Source/Doc/Applications.md b/Source/Doc/Applications.md index 4a145533..236b02e2 100644 --- a/Source/Doc/Applications.md +++ b/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 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 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 is (c)2004-2007 S.V.Bulba . -The source code is provided in the RomWBW distribution. \ No newline at end of file +The source code is provided in the RomWBW distribution. diff --git a/Source/Doc/Architecture.md b/Source/Doc/Architecture.md index ffc3120e..f3e20ea3 100644 --- a/Source/Doc/Architecture.md +++ b/Source/Doc/Architecture.md @@ -1392,20 +1392,38 @@ supplied is beyond driver capabilities, register A will be set to $FF. | _Entry Parameters_ | B: 0x53 | C: Audio Device Unit ID -| L: Note (0 to 255 quarter notes) +| HL: Value of note to play | _Returned Values_ | 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) diff --git a/Source/HBIOS/audio.inc b/Source/HBIOS/audio.inc index a3ca68da..b6365494 100644 --- a/Source/HBIOS/audio.inc +++ b/Source/HBIOS/audio.inc @@ -72,4 +72,4 @@ AUD_NOTE2: LD H, $FF ; OTHERWISE RETURN -1 PERIOD (ERROR) LD L, $FF RET -#ENDIF \ No newline at end of file +#ENDIF diff --git a/Source/HBIOS/ay38910.asm b/Source/HBIOS/ay38910.asm index 01dc90a5..38744a31 100644 --- a/Source/HBIOS/ay38910.asm +++ b/Source/HBIOS/ay38910.asm @@ -4,6 +4,10 @@ ; ;====================================================================== ; + +#include "cfg_state.inc" + + AY_RCSND .EQU 0 ; 0 = EB MODULE, 1=MF MODULE ; #IF (AYMODE == AYMODE_SCG) @@ -123,13 +127,46 @@ AY_FND: LD IY, AY_IDAT ; SETUP FUNCTION TABLE LD DE,(AY_R3CHBP*256)+$00 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 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 diff --git a/Source/HBIOS/cfg_state.inc b/Source/HBIOS/cfg_state.inc new file mode 100644 index 00000000..754f434b --- /dev/null +++ b/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 diff --git a/Source/ZPM3/loader.asm b/Source/ZPM3/loader.asm index ef80711d..42a8082d 100644 --- a/Source/ZPM3/loader.asm +++ b/Source/ZPM3/loader.asm @@ -27,9 +27,12 @@ ; #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_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 BLK_SIZE .EQU 128 ; OS BLOCK/RECORD SIZE diff --git a/Source/ver.inc b/Source/ver.inc index 86655b37..3cc80df6 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,4 +2,4 @@ #DEFINE RMN 1 #DEFINE RUP 1 #DEFINE RTP 0 -#DEFINE BIOSVER "3.1.1-pre.7" +#DEFINE BIOSVER "3.1.1-pre.8" diff --git a/Source/ver.lib b/Source/ver.lib index ee5204d5..2f03066f 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 1 rup equ 1 rtp equ 0 biosver macro - db "3.1.1-pre.7" + db "3.1.1-pre.8" endm