;***************************************************************************** ; ; Tone ; ; spiele einen Ton ; ; 2025-05-23 mchris ; ; Hardware: 6502, fcpu=1MHz, Junior Lerncomputer ; ; Lautsprecher Anschluss: Port P0 of 6532 ; ; assembler: ca65 ( https://cc65.github.io/doc/ca65.html ) ; 6502 instruction set: https://www.masswerk.at/6502/6502_instruction_set.html ; ;***************************************************************************** ; MOS6532 PIA Adressen PAD = $1A80 PADD = $1A81 PBD = $1A82 PBDD = $1A83 wavecountL=0 wavecountH=1 delayL=2 delayH=3 ; Programmstart .org $300 lda #$1 sta PBDD ; set PB0 to output main: ; note laden lda notes sta delayL lda notes+1 sta delayH ; dauer laden lda durations sta wavecountL lda durations+1 sta wavecountH jsr playtone jsr pause jmp main pause: ; Pause ; delay between notes ldx #$FF ldy #$FF jsr delayxy rts ;********************************************** ; -- playtone -- ; inputs ; wavecountL ; wavecountH ; delayL ; delayH ;********************************************** playtone: lda wavecountL tax lda wavecountH tay iny ; lowest frequency 1.522Hz, 657ms loop: ; save regs txa pha tya pha jsr delay ; load regs pla tay pla tax ; loudspeaker lda PBD ; port B lesen eor #$01 ; Bit 0 umschalten sta PBD ; zurückschreiben dex bne loop dey bne loop rts ;********************************************** ; -- delay -- ; inputs ; delayL ; delayH ;********************************************** delay: ldx delayL ldy delayH iny delayxy: dex bne delayxy dey bne delayxy rts ; Verzoegerungswerte notes: .word $170,$15c,$148,$136,$124,$114,$104, $f6, $e8, $db, $cf, $c3, $b8, $ae, $a4, $9b, $92, $8a, $82, $7b, $74, $6d, $68, $61, $5c, $57, $52, $4d, $49, $45, $3e ; Hz: 262, 277, 294, 311, 330, 349, 370, 392, 416, 440, 466, 495, 524, 554, 588, 622, 660, 698, 740, 784, 831, 880, 929, 992,1050,1106,1179,1244,1316,1397,1562 ; Wellenzyklen durations: .word 75, 79, 84, 89, 95, 100, 106, 112, 119, 126, 133, 142, 150, 159, 168, 178, 189, 200, 212, 224, 238, 253, 265, 285, 300, 317, 337, 358, 378, 400, 445