Sfoglia il codice sorgente

sio: new driver

master
Virgil Dupras 3 anni fa
parent
commit
ddb934813e
6 ha cambiato i file con 61 aggiunte e 0 eliminazioni
  1. +1
    -0
      blk/001
  2. +5
    -0
      blk/850
  3. +14
    -0
      blk/851
  4. +15
    -0
      blk/852
  5. +14
    -0
      blk/854
  6. +12
    -0
      blk/855

+ 1
- 0
blk/001 Vedi File

@@ -11,3 +11,4 @@ MASTER INDEX
620 Sega Master System Recipe
650 AVR assembler 730 8086 assembler
800 8086 boot code 830 PC/AT recipe
850 Zilog SIO driver

+ 5
- 0
blk/850 Vedi File

@@ -0,0 +1,5 @@
Zilog SIO driver

Declarations at B851

Driver load range at B852-BXXX.

+ 14
- 0
blk/851 Vedi File

@@ -0,0 +1,14 @@
0x80 CONSTANT SIO_ACTL 0x81 CONSTANT SIO_ADATA
0x82 CONSTANT SIO_BCTL 0x83 CONSTANT SIO_BDATA
0x20 CONSTANT SIO_BUFSZ ( SZ-1 must be a mask )
( Address in memory that can be used variables shared
with SIO native words. 4 bytes used. )
CREATE SIO_MEM SYSVARS 0x70 + ,
( Points to SIO buf )
: SIO( SIO_MEM @ 2+ ;
( Read buf idx Pre-inc )
: SIOR> SIO_MEM @ ;
( Write buf idx Post-inc )
: SIOW> SIO_MEM @ 1+ ;
( This means that if W> == R>, buffer is full.
If R>+1 == W>, buffer is empty. )

+ 15
- 0
blk/852 Vedi File

@@ -0,0 +1,15 @@
( INT handler. Set RST 38 jump ) PC ORG @ 0x39 + !
AF PUSH, BEGIN,
SIO_ACTL INAi, ( RR0 ) 0x01 ANDi, ( is recv buf full? )
IFZ, ( nope, exit ) A 0x20 ( CMD 4 ) LDri, SIO_ACTL OUTiA,
AF POP, EI, RETI, THEN,
HL PUSH,
HL SIOW> LDdi, A (HL) LDrr,
HL DECd, (HL) CPr, ( W> == R> ? )
IFNZ, ( buffer not full )
( get wr ptr ) HL SIO( LDd(i),
L ADDr, IFC, H INCr, THEN, L A LDrr,
( fetch/write ) SIO_ADATA INAi, (HL) A LDrr,
( advance W> ) SIOW> LDA(i), A INCr,
SIO_BUFSZ 1- ANDi, SIOW> LD(i)A,
THEN, HL POP, JR, AGAIN,

+ 14
- 0
blk/854 Vedi File

@@ -0,0 +1,14 @@
: (key)
( inc then fetch )
[ SIOR> LITN ] C@ 1+ [ SIO_BUFSZ 1- LITN ] AND
( As long as R> == W>-1, it means that buffer is empty )
BEGIN DUP [ SIOW> LITN ] C@ = NOT UNTIL
DUP [ SIO( LITN ] @ + C@ ( ridx c )
SWAP [ SIOR> LITN ] C! ( c )
;
: (emit)
( As long at CTL bit 2 is low, we are transmitting. wait )
BEGIN [ SIO_ACTL LITN ] PC@ 0x04 AND UNTIL
( The way is clear, go! )
[ SIO_ADATA LITN ] PC!
;

+ 12
- 0
blk/855 Vedi File

@@ -0,0 +1,12 @@
: _ [ SIO_ACTL LITN ] PC! ;
: SIO$
H@ [ SIO( LITN ] ! 0 [ SIOR> LITN ] C!
1 [ SIOW> LITN ] C! ( write index starts one pos later )
[ SIO_BUFSZ LITN ] ALLOT
0x18 _ ( CMD3 )
0x24 _ ( CMD2/PTR4 ) 0b11000100 _ ( WR4/64x/1stop/nopar )
0x03 _ ( PTR3 ) 0b11000001 _ ( WR3/RXen/8char )
0x05 _ ( PTR5 ) 0b11001000 _ ( WR5/TXen/8char )
0x21 _ ( CMD2/PTR1 ) 0b00011000 _ ( WR1/Rx INT all chars )
(im1)
;

Loading…
Annulla
Salva