delysio

Untitled

Nov 18th, 2019
388
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.69 KB | None | 0 0
  1. program detectSIO2SD;
  2.  
  3. uses atari, crt;
  4.  
  5. const
  6.      SIO_NONE        = $00;
  7.      SIO_READ        = $40;
  8.      SIO_WRITE       = $80;
  9.      SIO_READ_WRITE  = $c0;
  10.      
  11.      SIO2SD_STATUS   = $00;
  12.      SIO2SD_GETVER   = $11;
  13.  
  14. var
  15.      DDEVIC    : byte absolute $0300;
  16.      DUNIT     : byte absolute $0301;
  17.      DCOMND    : byte absolute $0302;
  18.      DSTATS    : byte absolute $0303;
  19.      DBUFLO    : byte absolute $0304;
  20.      DBUFHI    : byte absolute $0305;
  21.      DTIMLO    : byte absolute $0306;
  22.      DUNUSE    : byte absolute $0307;
  23.      DBYTLO    : byte absolute $0308;
  24.      DBYTHI    : byte absolute $0309;
  25.      DAUX1     : byte absolute $030a;
  26.      DAUX2     : byte absolute $030b;
  27.      SIOresult    : byte;
  28.      SIO2SDresult : byte;
  29.      majorVersion : byte;
  30.      minorVersion : byte;
  31.      buffer       : word absolute $8000;
  32.      
  33. procedure exec_sio(device: byte; dunit: byte; command: byte; aux1: byte; aux2: byte; direction: byte; timeout: byte; size: word);
  34. var l, h: byte;
  35. begin
  36.  
  37.      l := Lo(size);
  38.      h := Hi(size);
  39.      
  40.      asm {
  41.      
  42.           lda  device
  43.           sta  DDEVIC
  44.           lda  dunit
  45.           sta  DUNIT
  46.           lda  command
  47.           sta  DCOMND
  48.           lda  aux1
  49.           sta  DAUX1
  50.           lda  aux2
  51.           sta  DAUX2
  52.           lda  direction
  53.           sta  DSTATS
  54.           lda  <buffer
  55.           sta  DBUFLO
  56.           lda  >buffer
  57.           sta  DBUFHI
  58.           lda  timeout
  59.           sta  DTIMLO
  60.           lda  l
  61.           sta  DBYTLO
  62.           lda  h
  63.           sta  DBYTHI
  64.           jsr  $E459
  65.          
  66.           sty  SIOresult
  67.      
  68.      };
  69.  
  70. end;
  71.  
  72. begin
  73.  
  74.      exec_sio($72, $00, SIO2SD_STATUS, $00, $00, SIO_READ, $06, $01);
  75.      
  76.      if SIOresult = 1 then begin
  77.      
  78.           writeln('SIO2SD present');
  79.          
  80.           SIO2SDresult := Peek(buffer);
  81.          
  82.           case SIO2SDresult of
  83.          
  84.                0: writeln('No card in slot');
  85.                1: writeln('Card is in slot');
  86.          
  87.           end;
  88.              
  89.           exec_sio($72, $0, SIO2SD_GETVER, $0, $0, SIO_READ, $06, $01);
  90.      
  91.           if SIOresult = 1 then begin
  92.          
  93.                majorVersion := byte(Peek($8000) div $10);
  94.                minorVersion := byte(Peek($8000) mod $10);
  95.                
  96.                writeln('Firmware ver. ', majorVersion, '.', minorVersion);
  97.                
  98.                writeln;
  99.                writeln('Press any key to exit...');
  100.          
  101.           end;
  102.          
  103.      end else begin
  104.           writeln('SIO2SD is not present');
  105.           writeln;
  106.           writeln('Press any key to exit...');
  107.      end;
  108.      
  109.      repeat until keypressed;
  110.  
  111. end.
Add Comment
Please, Sign In to add comment