mirror of
https://github.com/irmen/prog8.git
synced 2024-09-07 19:54:26 +00:00
string param passing
This commit is contained in:
parent
8a2584c7df
commit
211609c481
@ -12,21 +12,15 @@
|
|||||||
memory uword freadstr_arg = $22 ; argument for FREADSTR
|
memory uword freadstr_arg = $22 ; argument for FREADSTR
|
||||||
uword testword
|
uword testword
|
||||||
|
|
||||||
testword = guess ; @todo fix str addrss
|
|
||||||
testword = "sadfsafsdf" ; @todo fix str address
|
|
||||||
secretnumber = "\n" ; @todo fix argument conversion to UBYTE
|
|
||||||
c64utils.init_system()
|
|
||||||
c64.VMCSB |= 2 ; activate lowercase charset
|
|
||||||
|
|
||||||
; greeting
|
; greeting
|
||||||
c64scr.print_string("Enter your name: ")
|
c64scr.print_string("Enter your name: ")
|
||||||
Y = c64scr.input_chars(name)
|
Y = c64scr.input_chars(name)
|
||||||
c64.CHROUT("\n") ; @todo fix argument conversion to UBYTE
|
c64.CHROUT('\n')
|
||||||
c64.CHROUT("\n") ; @todo fix argument conversion to UBYTE
|
c64.CHROUT('\n')
|
||||||
c64scr.print_string("Hello, ")
|
c64scr.print_string("Hello, ")
|
||||||
c64scr.print_string(name)
|
c64scr.print_string(name)
|
||||||
c64.CHROUT(".") ; @todo fix argument conversion to UBYTE
|
c64.CHROUT('.')
|
||||||
c64.CHROUT("\n") ; @todo fix argument conversion to UBYTE
|
c64.CHROUT('\n')
|
||||||
|
|
||||||
; create a secret random number from 1-100
|
; create a secret random number from 1-100
|
||||||
c64.RNDA(0) ; fac = rnd(0)
|
c64.RNDA(0) ; fac = rnd(0)
|
||||||
@ -36,10 +30,6 @@
|
|||||||
c64.FADDH() ; and again, so +1 total
|
c64.FADDH() ; and again, so +1 total
|
||||||
A, Y = c64flt.GETADRAY() ; @todo fix return value type check
|
A, Y = c64flt.GETADRAY() ; @todo fix return value type check
|
||||||
secretnumber = A
|
secretnumber = A
|
||||||
;A=math.randbyte()
|
|
||||||
;A+=c64.RASTER
|
|
||||||
;A-=c64.TIME_LO
|
|
||||||
;X,secretnumber=math.divmod_bytes(A, 99)
|
|
||||||
|
|
||||||
c64scr.print_string("I am thinking of a number from 1 to 100!You'll have to guess it!\n")
|
c64scr.print_string("I am thinking of a number from 1 to 100!You'll have to guess it!\n")
|
||||||
|
|
||||||
@ -51,8 +41,8 @@ ask_guess:
|
|||||||
|
|
||||||
c64scr.print_string(" left.\nWhat is your next guess? ")
|
c64scr.print_string(" left.\nWhat is your next guess? ")
|
||||||
Y = c64scr.input_chars(guess)
|
Y = c64scr.input_chars(guess)
|
||||||
c64.CHROUT("\n") ; @todo fix argument conversion to UBYTE
|
c64.CHROUT('\n')
|
||||||
freadstr_arg = guess ; @todo put string's adress in uword variable
|
freadstr_arg = guess
|
||||||
c64.FREADSTR(A)
|
c64.FREADSTR(A)
|
||||||
A, Y = c64flt.GETADRAY() ; @todo fix return value type check
|
A, Y = c64flt.GETADRAY() ; @todo fix return value type check
|
||||||
if(A==secretnumber) {
|
if(A==secretnumber) {
|
||||||
@ -72,7 +62,7 @@ ask_guess:
|
|||||||
; game over.
|
; game over.
|
||||||
c64scr.print_string("\nToo bad! It was: ")
|
c64scr.print_string("\nToo bad! It was: ")
|
||||||
c64scr.print_byte_decimal(secretnumber)
|
c64scr.print_byte_decimal(secretnumber)
|
||||||
c64.CHROUT("\n") ; @todo fix argument conversion to UBYTE
|
c64.CHROUT('\n')
|
||||||
|
|
||||||
goodbye:
|
goodbye:
|
||||||
c64scr.print_string("\nThanks for playing. Bye!\n")
|
c64scr.print_string("\nThanks for playing. Bye!\n")
|
||||||
|
42
compiler/examples/numbergame-novm.p8
Normal file
42
compiler/examples/numbergame-novm.p8
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
%import c64utils
|
||||||
|
|
||||||
|
~ main {
|
||||||
|
sub start() {
|
||||||
|
str name = " "
|
||||||
|
str guess = "000000"
|
||||||
|
ubyte secretnumber = rnd() % 100
|
||||||
|
|
||||||
|
c64scr.print_string("Let's play a number guessing game!\n")
|
||||||
|
c64scr.print_string("Enter your name: ")
|
||||||
|
vm_input_str(name)
|
||||||
|
c64scr.print_string("\nHello, ")
|
||||||
|
c64scr.print_string(name)
|
||||||
|
c64scr.print_string(".\nI am thinking of a number from 1 to 100! You'll have to guess it!\n")
|
||||||
|
|
||||||
|
for ubyte attempts_left in 10 to 1 step -1 {
|
||||||
|
c64scr.print_string("\nYou have ")
|
||||||
|
vm_write_num(attempts_left)
|
||||||
|
c64scr.print_string(" guess")
|
||||||
|
if attempts_left>1 c64scr.print_string("es")
|
||||||
|
c64scr.print_string(" left. What is your next guess? ")
|
||||||
|
vm_input_str(guess)
|
||||||
|
ubyte guessednumber = str2ubyte(guess)
|
||||||
|
if guessednumber==secretnumber {
|
||||||
|
c64scr.print_string("\nYou guessed it, impressive!\n")
|
||||||
|
c64scr.print_string("Thanks for playing.\n")
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
c64scr.print_string("That is too ")
|
||||||
|
if guessednumber<secretnumber
|
||||||
|
c64scr.print_string("low!\n")
|
||||||
|
else
|
||||||
|
c64scr.print_string("high!\n")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
c64scr.print_string("\nToo bad! My number was: ")
|
||||||
|
vm_write_num(secretnumber)
|
||||||
|
c64scr.print_string(".\n")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
@ -810,7 +810,7 @@ private class StatementTranslator(private val prog: IntermediateProgram,
|
|||||||
translate(arg.first)
|
translate(arg.first)
|
||||||
prog.instr(Opcode.POP_REGAX_WORD)
|
prog.instr(Opcode.POP_REGAX_WORD)
|
||||||
} else
|
} else
|
||||||
throw CompilerException("don't know how to pass register parameter of type $paramDt")
|
TODO("pass parameter of type $paramDt in registers ${arg.second.registerOrPair}")
|
||||||
}
|
}
|
||||||
AY -> {
|
AY -> {
|
||||||
val valueA: IExpression
|
val valueA: IExpression
|
||||||
@ -829,7 +829,7 @@ private class StatementTranslator(private val prog: IntermediateProgram,
|
|||||||
translate(arg.first)
|
translate(arg.first)
|
||||||
prog.instr(Opcode.POP_REGAY_WORD)
|
prog.instr(Opcode.POP_REGAY_WORD)
|
||||||
} else
|
} else
|
||||||
throw CompilerException("don't know how to pass register parameter of type $paramDt")
|
TODO("pass parameter of type $paramDt in registers ${arg.second.registerOrPair}")
|
||||||
}
|
}
|
||||||
XY -> {
|
XY -> {
|
||||||
// TODO: save X on stack & restore after call
|
// TODO: save X on stack & restore after call
|
||||||
@ -849,7 +849,7 @@ private class StatementTranslator(private val prog: IntermediateProgram,
|
|||||||
translate(arg.first)
|
translate(arg.first)
|
||||||
prog.instr(Opcode.POP_REGXY_WORD)
|
prog.instr(Opcode.POP_REGXY_WORD)
|
||||||
} else
|
} else
|
||||||
throw CompilerException("don't know how to pass register parameter of type $paramDt")
|
TODO("pass parameter of type $paramDt in registers ${arg.second.registerOrPair}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user