i don't know if is a bug or what with beeper sound routine - Printable Version +- Forum (https://www.boriel.com/forum) +-- Forum: Compilers and Computer Languages (https://www.boriel.com/forum/forumdisplay.php?fid=12) +--- Forum: ZX Basic Compiler (https://www.boriel.com/forum/forumdisplay.php?fid=11) +---- Forum: Help & Support (https://www.boriel.com/forum/forumdisplay.php?fid=16) +---- Thread: i don't know if is a bug or what with beeper sound routine (/showthread.php?tid=876) |
i don't know if is a bug or what with beeper sound routine - maeloterkim - 04-17-2019 Hi THIS CODE WORKS AS EXPECTED 1) CLS 2) Print "Hello" 3) Make a sound with assembler subroutine 4) Print "World" 5) Make the STOP --------INI CODE --------------------------------------------------------------------------------------------- SUB mySound() ASM LD B,5 loop: PUSH BC LD HL,768 anotherLoop: LD DE,1 PUSH HL CALL 949 ;'ROM BEEPER ROUTINE 949 = $3B5 POP HL LD DE,16 AND A SBC HL,DE JR NZ, anotherLoop POP BC DJNZ loop RET END ASM END SUB CLS : REM 'Clear screen PRINT "Hello" : REM 'Print Hello on screen mySound() : REM 'Make the sound PRINT "World" : REM 'Print World on screen STOP : REM STOP the program ----------------- END CODE ---------------------------------------------------------------------------------------------------- But if i change something, doesn't work Per example : 1) ¿BUG ERROR? If i change the assembler code and i put PUSH IX AT THE BEGINNING AND POP IX AT THE END that is the advice in this forum to all assembler routines SUB mySound() ASM PUSH IX ; This make the program not work properly LD B,5 ...... ...... ...... DJNZ loop POP IX ; This make the program not work properly RET END ASM END SUB doesn't work 2) ¿BUG ERROR? If i add some blank space to the words printed per example "hello " blank space at the end or somewhere or at the printed word "world " make the program not work properly and don't execute the last print and the stop 3) ¿BUG ERROR? If i add ; at the end of the word "Hello" per example "Hello"; doesn't work either 4) ¿BUG ERROR? If i make the words "Hello" and "World" variables Per example a$ = "Hello", b$ = "World" anfd i make PRINT a$ : REM 'Print Hello on screen mySound() : REM 'Make the sound PRINT b$ : REM 'Print World on screen doesn't work either ----------------------------------------------------------------------------------------------------------------- I don't know what is going on ¿?¿?¿ Thanks Re: i don't know if is a bug or what with beeper sound routi - boriel - 04-17-2019 Which version do you have? (use zxb --version to get the version) You should not use RET in an ASM context to return from a SUB / Function except when it's declared as Fastcall. So: 1) Remove the RET 2) Declare the SUB as SUB Fastcall since it has no parameters and its entire body consist of ASM Try this and tell me. :roll: Re: i don't know if is a bug or what with beeper sound routi - maeloterkim - 04-18-2019 Hello The version is version-1.8.9 , the last i think 1) With fastcall and without the RET works well 2 ) With fastcall and with the RET works well 3) Without the fastcall and with the RET doesn't work 4) Without the fastcall and without the RET make crazy thinks The solution was put the fastcall text after the SUB Thanks Re: i don't know if is a bug or what with beeper sound routi - boriel - 04-19-2019 Glad to see it works. You can use RET only from FASTCALL SUB and FUNCTIONS, but there's always an implicit RET at the end of functions. For non-FASTCALL SUBs, you have to jump to the end of the function, because these ones reorganize the stack before returning. |