ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/vt102/vt102
(Generate patch)

Comparing vt102/vt102 (file contents):
Revision 1.15 by root, Wed Dec 3 02:14:56 2014 UTC vs.
Revision 1.18 by root, Wed Dec 3 02:16:45 2014 UTC

98 98
99############################################################################# 99#############################################################################
100# 8085 CPU registers and I/O support 100# 8085 CPU registers and I/O support
101 101
102# 8080/8085 registers 102# 8080/8085 registers
103# b, c, d, e, h, l, a
104my ($A, $B, $C, $D, $E, $H, $L, $A); 103my ($A, $B, $C, $D, $E, $H, $L);
105my ($PC, $SP, $IFF, $FA, $FZ, $FS, $FP, $FC); 104my ($PC, $SP, $IFF, $FA, $FZ, $FS, $FP, $FC);
106 105
107my $RST = 0; # 8080 pending interrupts 106my $RST = 0; # 8080 pending interrupts
108my $INTMASK = 7; # 8085 half interrupts 107my $INTMASK = 7; # 8085 half interrupts
109my $INTPEND = 0; # 8085 half interrupts 108my $INTPEND = 0; # 8085 half interrupts
110
111my $x; # dummy temp for instructions
112 109
113my $CLK; # rather inexact clock 110my $CLK; # rather inexact clock
114 111
115############################################################################# 112#############################################################################
116# the dreaded NVR1400 chip. not needed to get it going, but provided anyway 113# the dreaded NVR1400 chip. not needed to get it going, but provided anyway
292sub in_17 { 0xff } # vt102 unknown, printer status clear by reading? 289sub in_17 { 0xff } # vt102 unknown, printer status clear by reading?
293sub in_1b { 0xff } # vt102 unknown 290sub in_1b { 0xff } # vt102 unknown
294 291
295############################################################################# 292#############################################################################
296# 8085 cpu opcodes and flag handling 293# 8085 cpu opcodes and flag handling
294
295my $x; # dummy scratchpad for opcodes
297 296
298sub sf { # set flags (ZSC - AP not implemented) 297sub sf { # set flags (ZSC - AP not implemented)
299 $FS = $_[0] & 0x080; 298 $FS = $_[0] & 0x080;
300 $FZ = !($_[0] & 0x0ff); 299 $FZ = !($_[0] & 0x0ff);
301 $FC = $_[0] & 0x100; 300 $FC = $_[0] & 0x100;
747 eval "use integer; sub { $insn }" or die "$insn: $@" 746 eval "use integer; sub { $insn }" or die "$insn: $@"
748 })->(); 747 })->();
749 748
750 ++$CLK; 749 ++$CLK;
751 750
752 # things we do from time too time only 751 # things we do from time to time only
753 unless ($CLK & 0xf) { 752 unless ($CLK & 0xf) {
754 # do I/O 753 # do I/O
755 754
756 unless ($CLK & 0xfff) { 755 unless ($CLK & 0xfff) {
757 756
801 # 6.5 vt125 mb7 read ready (something modem?) 800 # 6.5 vt125 mb7 read ready (something modem?)
802 # 7.5 vt125 mb7 vblank h(?) 801 # 7.5 vt125 mb7 vblank h(?)
803 # trap vt125 mbi init h(?) 802 # trap vt125 mbi init h(?)
804 my $vec; 803 my $vec;
805 804
806 $x = $INTPEND & ~$INTMASK; 805 my $pend = $INTPEND & ~$INTMASK;
807 806
808 if ($x & 1) { $vec = 0x2c; $INTPEND &= ~1; 807 if ($pend & 1) { $vec = 0x2c; $INTPEND &= ~1;
809 } elsif ($x & 2) { $vec = 0x34; $INTPEND &= ~2; 808 } elsif ($pend & 2) { $vec = 0x34; $INTPEND &= ~2;
810 } elsif ($x & 4) { $vec = 0x3c; $INTPEND &= ~4; 809 } elsif ($pend & 4) { $vec = 0x3c; $INTPEND &= ~4;
811# } elsif ($RST ) { $vec = $RST * 8; $RST = 0; # the vt102 firmware doesn't like combined interrupts 810# } elsif ($RST ) { $vec = $RST * 8; $RST = 0; # the vt102 firmware doesn't like combined interrupts
812 } elsif ($RST & 1) { $vec = 0x08; $RST &= ~1; # separate is better for vt102 811 } elsif ($RST & 1) { $vec = 0x08; $RST &= ~1; # separate is better for vt102
813 } elsif ($RST & 2) { $vec = 0x10; $RST &= ~2; 812 } elsif ($RST & 2) { $vec = 0x10; $RST &= ~2;
814 } elsif ($RST & 4) { $vec = 0x20; $RST &= ~4; 813 } elsif ($RST & 4) { $vec = 0x20; $RST &= ~4;
815 } else { 814 } else {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines