
For most people this program will probably be a bit useless as it stands. However, feel free to alter the program for your own use.
Code: Select all
; Register code trainer
; A tool to learn the binary codes for registers used in cpu opcodes
; Input format is code as three digits ("000") or register name ("eax")
; depending on the question asked. Press enter to answer.
; For some hints for starters, read this source code:
Global Dim reg32.s(8)
reg32(0) = "eax"
reg32(1) = "ecx"
reg32(2) = "edx"
reg32(3) = "ebx"
reg32(4) = "esp"
reg32(5) = "ebp"
reg32(6) = "esi"
reg32(7) = "edi"
Global _ans.s
Global _qst.s
OpenWindow(0, 0, 0, 310, 384, "Register code trainer", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget)
TextGadget(0, 10, 10, 500, 22, "")
TextGadget(100, 10, 65, 80, 24, "Type here:")
StringGadget(1, 90, 62, 200, 21, "")
EditorGadget(2, 10, 90, 290, 250)
Procedure NextQuestion()
Static regprev
Repeat
reg = Random(7)
Until reg <> regprev
regprev = reg
type = Random(2)
_qst = reg32(reg)
_ans = RSet(Bin(reg), 3, "0")
If type = 0 ; (1/3)
q.s = "What is the binary register code for " + _qst + "?"
Else ; (2/3)
Swap _qst, _ans
q.s = "What register has the register code " + _qst + "?"
EndIf
SetGadgetText(0, q)
EndProcedure
Procedure Removeanswer()
t.s = GetGadgetItemText(2, 0)
If t
t = Left(t, Len(t)-3) + "___"
SetGadgetItemText(2, 0, t)
EndIf
EndProcedure
Procedure Printok()
Removeanswer()
SetGadgetText(1, "")
AddGadgetItem(2, 0, "Correct! " + _qst + " = " + _ans)
EndProcedure
Procedure Printwrong(t.s)
Removeanswer()
AddGadgetItem(2, 0, "Wrong! " + _qst + " <> " + t)
SetGadgetColor(1, #PB_Gadget_BackColor, #Red)
SetGadgetColor(1, #PB_Gadget_FrontColor, #White)
EndProcedure
Procedure Answer()
t.s = GetGadgetText(1)
If Left(t, 1) = "%"
t = Mid(t, 2)
EndIf
If t = _ans
Printok()
NextQuestion()
Else
Printwrong(t)
EndIf
EndProcedure
AddKeyboardShortcut(0, #PB_Shortcut_Return, 0)
NextQuestion()
SetActiveGadget(1)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case 1
If EventType() = #PB_EventType_Change
SetGadgetColor(1, #PB_Gadget_BackColor, -1)
SetGadgetColor(1, #PB_Gadget_FrontColor, -1)
EndIf
EndSelect
Case #PB_Event_Menu
Answer()
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver