[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Difficulty programming sound via AppleSoft & machine language



KP <kjpmail@gmail.com> writes:

> I have a program listing that I've typed in from a (very) old issue of
> 3-2-1 Contact magazine (successor to the old Enter magazine) from the
> mid-80s.  It is supposed to produce sound, but when it hits line 320
> (the CALL to location 770), it just hangs.  I have tried everything
> and can't seem to get it to work.
>
> Does anyone have a suggestion?
>
> Here's the program (only about 32 simple lines):
>
> REM SPACE PHONE
> REM 3-2-1 CONTACT MAGAZINE
> REM BASIC TRAINING
> REM PAGE 36
>
> 10 HOME
> 20 FOR AD = 770 TO 790
> 30 READ BYTE
> 40 POKE AD,BYTE
> 50 NEXT AD
> 60 DATA 173, 48, 192, 136, 208, 5, 20, 6, 1, 3, 240, 9, 202, 208, 245,
> 174, 0, 3, 76, 2, 3, 96
> 70 HOME : VTAB 12
> 80 PRINT "PREPARE TO RECEIVE ALIEN TRANSMISSION
> 90 K = 32
> 100 FOR J = 50 TO 17 STEP - 1
> 110 GOSUB 300
> 120 NEXT J
> 130 HOME
> 140 B = INT (RND(1) * 80 + 1)
> 150 GOSUB 230
> 160 VTAB 20 : HTAB 1
> 170 PRINT "WHAT IS YOUR REPLY?"
> 180 INPUT R$
> 190 IF R$ = "BYE" THEN 210
> 200 GOTO 130
> 210 B = 5: GOSUB 230
> 220 END
> 230 FOR A = 1 TO B
> 240 J = INT(RND(1) * 45 - 20)
> 250 K = INT(RND (1) * 45 - 20)
> 260 PRINT CHR$ (K);
> 270 GOSUB 300
> 280 NEXT A
> 290 RETURN
> 300 POKE 768,J
> 310 POKE 769,K
> 320 CALL 770: RETURN


I think your DATA statement has some bad numbers:  5, 20, 6

It disassembles to this:

302: ad 30 c0   lda $c030
305: 88         dey
306: d0 05      bne $30d
308: 14 06      trb $06   ; (on 65C02 or 65816)
30a: 01 03      ora ($03,x)
30c: f0 09      beq $317
30e: ca         dex
30f: d0 f5      bne $306
311: ae 00 03   ldx $300
314: 4c 02 03   jmp $302
317: 60         rts


The BNE at $306 branches to the middle of the BEQ at $30C which instead
becomes:

30d: 09 ca      ora #$ca
30f: bne        $306

This will cause an infinite loop which explains why it hangs.


--
Jerry    awanderin at yahoo dot ca