tsysvars.pas 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. {
  2. Copyright (c) 2021 Karoly Balogh
  3. Test system variable offsets on a Sinclair QL
  4. A test program for Free Pascal's Sinclair QL support
  5. This test program is in the Public Domain under the terms of
  6. Unlicense: http://unlicense.org/
  7. **********************************************************************}
  8. program tsysvars;
  9. uses
  10. qdos;
  11. var
  12. system_vars: SystemVariables;
  13. type
  14. offset_test = record
  15. name: string[16];
  16. offset: longint;
  17. sysvar: pointer;
  18. end;
  19. const
  20. { example offsets. feel free to extend... }
  21. sysvar_offsets: array of offset_test = (
  22. ( name: 'SV_RAND'; offset: $2E; sysvar: @system_vars.SV_RAND ),
  23. ( name: 'SV_TMODE'; offset: $A0; sysvar: @system_vars.SV_TMODE ),
  24. ( name: 'SV_CSUB'; offset: $A2; sysvar: @system_vars.SV_CSUB ),
  25. ( name: 'SV_PRGD'; offset: $AC; sysvar: @system_vars.SV_PRGD ),
  26. ( name: 'SV_TURBO'; offset: $160; sysvar: @system_vars.SV_TURBO )
  27. );
  28. function check_sysvar_offset(const test: offset_test): boolean;
  29. var
  30. actual_offset: longint;
  31. begin
  32. actual_offset:=pbyte(test.sysvar)-pbyte(@system_vars);
  33. writeln(test.name,' at: ',actual_offset,' $',hexstr(actual_offset,3));
  34. check_sysvar_offset:=(test.offset = actual_offset);
  35. end;
  36. function test_sysvar_offsets: boolean;
  37. var
  38. i: longint;
  39. begin
  40. test_sysvar_offsets:=false;
  41. for i:=low(sysvar_offsets) to high(sysvar_offsets) do
  42. if not check_sysvar_offset(sysvar_offsets[i]) then
  43. exit;
  44. test_sysvar_offsets:=true;
  45. end;
  46. begin
  47. if test_sysvar_offsets then
  48. writeln('All OK!')
  49. else
  50. writeln('Error! Wrong offset!');
  51. end.