Jump to content

ivop

Members
  • Content Count

    2,271
  • Joined

  • Last visited

  • Days Won

    3

Posts posted by ivop


  1. 4 minutes ago, emkay said:

    woaah this is really annoying ...

    Duh. That was not the point. The Taylor Dane part shows how three oscillators playing their own freqeuncy, at a bare 100Hz update rate, can create pretty convincing human voices. Other examples were less convincing, but still you hear some interesting sounds during Kraftwerk. Anyway, consider ooooh, aaaah, iiiiih, eeeeh, uuuuh, backing vocals at 800Hz. With the voice of Taylor Dane ;)

     

     

    • Like 1

  2. On 5/7/2021 at 2:37 AM, rensoup said:

    Possibly but I don't know if there would be any advantage... I'm thinking LZSS can be modified to output all 4 channels at different frequencies so it would be very similar ( in terms of efficiency and code simplicity )

    If the interleaving allows that, that would be the answer! 9 streams, 2 at high speed, 7 at 50Hz (PAL).

    Quote

    That could be interesting and a nice space saver... But are there any combo that are invalid ? It seems that those registers can be abused in all sorts of ways... Vinscool mentioned that you can use Volume only and still use AUDF for different purposes.

    Yeah, it might be difficult to find escape sequences that always work. HARDbass has the advantage that the RMT player is still running. It can act on certain RMT instruments, which is not possible with a SAP-R or LZSS compressed streams. Hence the idea of escape sequences.

     

    Perhaps the different volume only modes could be (ab)used for this. $10-$1f is just volume only, but $30-$3f, $50-$5f etc..., could be used to signal that a certain tone generator should be enabled (ORA #$A0 for example).

     

    You can easily create an RMT instrument that only uses volume only values for AUDC.

     

    Quote

    I'm also waiting for that killer tune that proves 200+hz updates are actually useful 😀

    This could be done on Pokey, too:

    https://www.youtube.com/watch?v=lHjn8ffnEKU

     

    Currently, higher update frequencies are mainly used for percussion and drums, but it could also be used for modulations in the higher frequency range.

     

     

    Edit: Sorry, this is not what I meant. There's a C64 demo that uses its programmable sound generators to generate several frequencies that were present in the original sample. Can't find it, but I'll keep looking ;) But that's something that could also generate interesting sounds at 200+Hz. Modulating higher freqeuencies.

     

    • Like 2

  3. 2 hours ago, Rybags said:

    The thing I'm interested in though is whether you could have coexistent boot sectors for both ST and Amiga.  I suspect the answer is yes. 

    Interesting. As they both run a 68k, I suppose it should be possible to detect if one is running on an ST or Amiga. Do Amiga disks use the same FAT12 boot sector? Otherwise, it could become tricky.


  4. Incroyable. They managed 10:30am :)

     

    project-helena-pcbs.png.936f8b8e2cf620f4de782fa2d780a87d.png

     

    First mistake I noticed: it was pretty dumb to do black on yellow. Now my "serial number" window is completely black, which is pretty hard to write on ;)

     

    Next, I need to separate the ROSSH part (hacksaw or boxknife), and then start soldering the switches!

     

     

    Edit: BTW considering the DHL prices (see two posts above), I was surprised to see a DHL guy at the door, because I ordered FedEx! :)

     

    Edit2:

     

    project-helena-pcb-cut.png.eaa4bdd10f898f362955b991e0461ee7.png

    • Like 4

  5. Well, they took a bit longer.

     

    FEDEX-all-over-the-place.thumb.png.78424e3beb5c8dd16294619e07a8adab.png

     

    So that's a ride from Hangzou, China, to Shanghai Airport, several scans, flight to Sennan in Japan, flight to Grace-Hollogne (which is Luik/Liege) in Belgium. That's just across the border of Maastricht, but no, it was flown to Paris, France(!) :) Apparently it's now in transit again. I assume to Amsterdam, The Netherlands ? They say they'll deliver it at my doorstep within 10 hours from now. I'm off to bed :D

     


  6. On 4/19/2021 at 1:42 AM, rensoup said:

    Yes there should be just enough juice for 800hz with 4 channels which like you said is probably not very useful. A single 800hz channel (at fixed updates) would be nicer but it may require changes to LZSS

    Perhaps you can have two separate LZSS streams? One for channel 2-4 at 50/60Hz, and one high speed stream for channel 1.

     

    Another option is to just run your LZSS player at 50/60Hz, but use escape sequences (i.e. certain AUDF/AUDC combinations that make no sense) that trigger a parallel waveform player that is run every x scanlines.

     

    • Like 1

  7. On 5/4/2021 at 4:51 AM, rensoup said:

    I'm guessing 16bit here has nothing to do with AUDCTL linked channels ?

    I think he means commands for glissandos, vibrato, and arpeggios at 16-bit resolution with AUDCTL linked channels. This is something RMT does not support.

     

    • Like 1

  8. 3 hours ago, Duke748 said:
    • Before I power it on are there any pointers on voltages to check on the PSU and the board itself
    • Recommened capacitor replacement checks

    This explains your Spectrum experience :)  Yesterday, for the first time in my life, I watched a Spectrum restoration video on YouTube, and they specifically tested several points to assure powering on the board wouldn't fry it :) Interesting stuff. And they totally recapped the board.


  9. 1 hour ago, Wildstar said:

    reference to the "liz" project

    Darn, there already was a Liz Project? That would have been the name of choice for my next hardware project ;)

     

    About the C, MOS indeed had 6502 A/B/C which meant 1/2/4MHZ. The 6502C version never really got any foothold. With "our" 6502C, i.e. Sally, C means Custom. It's a 6502B with extra transistors for the /HALT line. The early Atari 400/800 models used a 6502B, with the HALT circuitry external to the CPU.

    • Like 1

  10. Here they are pretty cheap, and no need for huge quantities. If I'm not mistaken (to lazy to lookup) this is the same store I bought the non-angled versions for Project Jenny.

     

    Both 2x7 and 2x15 are available.

     

    Edit: just checked, it is indeed the same store.

     


  11. Tried different waveforms:

     

    GENWAVEFORM    .macro mem, label, x
        org :mem
    .def waveform:label = *
    
    ; SQUARE
    ::x dta $1f
    ::x dta $10
    
    ; SAW
    ;::x*2 dta $1f-(#*16/(:x*2))
    
    ; SINE
    ;    dta sin($18, 7, :x*2)
    
    ; TRIANGLE
    ;::x dta $10+(#*16/(:x))
    ;::x dta $1f-(#*16/(:x))
    
    .def len_waveform:label = * - waveform:label
        .endm

     

    Note that this uses a 48 byte waveform, or less, down to 26 bytes. Replay rate is 975Hz (PAL). All maximum volume.

     

    Square wave: sounds pretty good. Could also be used as a subwoofer channel.

    Saw wave: similar, but you can still hear some aliasing.

     

    Sine wave: horrible bass IMHO. Slightly higher, it still might be useful.

    Triangle wave: see sine wave :)

     

    main.s main-saw.xex main-sine.xex main-square.xex main-triangle.xex

    • Like 1
    • Thanks 1

  12. Proof of concept with varying window sizes.

     

    AUDF1   = $d200
    AUDC1   = $d201
    AUDCTL  = $d208
    WSYNC   = $d40a
    VCOUNT  = $d40b
    NMIEN   = $d40e
    _frac   = $e0
    _cnt    = $e1
    
    GENWAVEFORM    .macro mem, label, x
        org :mem
    .def waveform:label = *
    ::x dta $1f
    ::x dta $10
    .def len_waveform:label = * - waveform:label    ; should be 2*:x
        .endm
    
    PLAYWAVEFORM .macro x, int, frac
    _index = *+1
        lda waveform:x
    :+16    sta WSYNC           ; 8=1950Hz, 16=975Hz, PAL
        sta AUDC1
        lda _frac
        add #:frac
        sta _frac
        lda _index
        adc #:int
        cmp #len_waveform:x
        bcc less_than
        sec
        sbc #len_waveform:x
    less_than
        sta _index
        .endm
    
    LOOPWAVEFORM .macro x, int, frac
    loopwave
        PLAYWAVEFORM :x, :int, :frac
    
        lda VCOUNT
        bne loopwave
    
    :+8    inc _cnt
        bpl loopwave
        lda #0
        sta _cnt
        .endm
    
    ; 12 tones, 12-TET
        GENWAVEFORM $4000,  0, 24
        GENWAVEFORM $4100,  1, 23
        GENWAVEFORM $4200,  2, 22
        GENWAVEFORM $4300,  3, 21
        GENWAVEFORM $4400,  4, 20
        GENWAVEFORM $4500,  5, 19
        GENWAVEFORM $4600,  6, 18
        GENWAVEFORM $4700,  7, 17
        GENWAVEFORM $4800,  8, 16
        GENWAVEFORM $4900,  9, 15
        GENWAVEFORM $4a00, 10, 14
        GENWAVEFORM $4b00, 11, 13
    ;    GENWAVEFORM $4c00, 12, 12      ; octave
    
        org $5000
    
    main
        lda #0
        sta _frac
        sta _cnt
        sta NMIEN
        sta AUDCTL
        sta AUDF1
    
        LOOPWAVEFORM  0, 1, 0
        LOOPWAVEFORM  1, 1, 0
        LOOPWAVEFORM  2, 1, 0
        LOOPWAVEFORM  3, 1, 0
        LOOPWAVEFORM  4, 1, 0
        LOOPWAVEFORM  5, 1, 0
        LOOPWAVEFORM  6, 1, 0
        LOOPWAVEFORM  7, 1, 0
        LOOPWAVEFORM  8, 1, 0
        LOOPWAVEFORM  9, 1, 0
        LOOPWAVEFORM 10, 1, 0
        LOOPWAVEFORM 11, 1, 0
        LOOPWAVEFORM  0, 2, 0
        LOOPWAVEFORM  1, 2, 0
        LOOPWAVEFORM  2, 2, 0
        LOOPWAVEFORM  3, 2, 0
        LOOPWAVEFORM  4, 2, 0
        LOOPWAVEFORM  5, 2, 0
        LOOPWAVEFORM  6, 2, 0
        LOOPWAVEFORM  7, 2, 0
        LOOPWAVEFORM  8, 2, 0
        LOOPWAVEFORM  9, 2, 0
        LOOPWAVEFORM 10, 2, 0
        LOOPWAVEFORM 11, 2, 0
        LOOPWAVEFORM  0, 1, 0
    
        jmp *
    
        run main

    Note that this is by no means tuned to anything. It plays samples at 975Hz, and the intervals are all the twelve notes in an octave that work without fractions. Tuning means calculating compromises between window size and int.frac increments.

     

     

     

    main.s main.xex

    • Like 2
    • Thanks 1

  13. I did some test, and without proper resampling on the Atari side, the round-robin 256 bytes at different speeds at such a low sample rate, simply doesn't work. It causes a LOT of aliasing. Code:

     

    AUDF1   = $d200
    AUDC1   = $d201
    AUDCTL  = $d208
    IRQEN   = $d20e
    WSYNC   = $d40a
    NMIEN   = $d40e
    _frac   = $e0
    
        org $4000
    
    waveform
    :128 dta $1f
    :128 dta $10
    
    main
        sei
        lda #0
        sta _frac
        sta NMIEN
        sta IRQEN
        sta AUDCTL
        sta AUDF1
    
    loop
    
    _index = *+1
        lda waveform
    :16    sta WSYNC
        sta AUDC1
    
        lda _frac
        clc
        adc #$00		; frac increment
        sta _frac
        lda _index
        adc #$08		; int increment
        sta _index
    
        jmp loop
    
        run main

    It only works with common dividers of the sample window. Try changing the integer increment, or add a fractional part, and you'll hear what I mean.

     

    The cause is that you are basically doing a very crude resampling if you use an increment to "hop" through your sample window.

     

    A solution is to use varying window sizes for each of the twelve notes per octave. Lower octaves can be achieved by stepping slower through the window, with half the increment/fraction/hop size.

     

    Or, trigger an IRQ at AUDF frequency, step through one fixed window byte by byte, but that'll mean interrupts are fired all over the place, depending on the frequency of the tone played.

     

     

    Edit: BTW, if you wonder, turning off DMACTL does not have any effect.

     

    • Like 2

  14. @rensoup how do you synchronize a 800Hz replay routine? Seems hard to me. There's a reason HARDbass is 1950Hz on PAL, without sacrificing an IRQ timer.

     

    $ bc
    312*50/8
    1950.000000
    312/8
    39.000000
    
    312*50/16
    975.000000
    312/16
    19.500000
    
    312*50/24
    650.000000
    312/24
    13.000000

     

    Playing a sample once every 8 scanlines. 312 scanlines are exactly 39 times 8 scanlines.

     

    Playing one sample every 16 scanlines, resulting in a 975Hz replay rate, does not fit in 312 scanlines. It's 19 and a half period.

     

    Once every 24 scanlines fits again.

    • Like 1

  15. 1 hour ago, bfollowell said:

    I was seriously considering that but, depending on how often I remove the keyboard, and how much flexing there is on those wires, I could see them breaking off of the pin header.

    True, but that's much easier to fix again.

     

    Or wait for this to be tested and working ;)

     

    https://atariage.com/forums/topic/304492-xl-keyboard-technical-drawings/?do=findComment&comment=4808864

     

    That'll be just flat cables going to the motherboard.

     

    I'm also considering a small adapter board similar to @tf_hh 's KEYCON project:

     

    https://atariage.com/forums/topic/270312-new-tiny-project-keycon-keyboard-adapter-for-xlxe/

     

    A very small 0.8mm PCB with a pin header, for those who can't or won't desolder the keyboard edge connector.

×
×
  • Create New...