mirror of
https://github.com/trudnai/Steve2.git
synced 2025-01-02 18:32:37 +00:00
- Removed some dead code
- Disk accelerator reset moved to a function - Some tiny speed optimizations
This commit is contained in:
parent
e871c32202
commit
e18bc9653e
@ -81,12 +81,6 @@ disassembly_t disassembly;
|
||||
#include "../util/disassembler.h"
|
||||
#include "../dev/mem/mmio.h"
|
||||
|
||||
uint16_t videoShadow [0x1000];
|
||||
uint32_t videoMem [0x2000];
|
||||
uint32_t * videoMemPtr = videoMem;
|
||||
|
||||
uint16_t HiResLineAddrTbl [0x2000];
|
||||
|
||||
|
||||
INLINE void set_flags_N( const uint8_t test ) {
|
||||
m6502.N = BITTEST(test, 7);
|
||||
@ -124,62 +118,12 @@ INLINE void set_flags_NZC( const int16_t test ) {
|
||||
set_flags_C(test);
|
||||
}
|
||||
|
||||
//INLINE void set_flags_NZCV( int test ) {
|
||||
// set_flags_NZC(test);
|
||||
// set_flags_V(test);
|
||||
//}
|
||||
|
||||
|
||||
|
||||
void initHiResLineAddresses() {
|
||||
uint16_t i = 0;
|
||||
for ( uint16_t x = 0; x <= 0x50; x+= 0x28 ) {
|
||||
for ( uint16_t y = 0; y <= 0x380; y += 0x80 ) {
|
||||
for ( uint16_t z = 0; z <= 0x1C00; z += 0x400) {
|
||||
HiResLineAddrTbl[i++] = x + y + z;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
typedef struct {
|
||||
uint8_t L;
|
||||
uint8_t H;
|
||||
} bytes_t;
|
||||
|
||||
void hires_Update () {
|
||||
// lines
|
||||
int videoMemIndex = 0;
|
||||
for( int y = 0; y < 192; y++ ) {
|
||||
// 16 bit blocks of columns
|
||||
for ( int x = 0; x < 20; x++ ) {
|
||||
// odd
|
||||
bytes_t block = * (bytes_t*)(& RAM[ HiResLineAddrTbl[y * 20] + x * 2 ]);
|
||||
for ( uint8_t bit = 0; bit < 7; bit++ ) {
|
||||
uint8_t bitMask = 1 << bit;
|
||||
|
||||
if (block.L & bitMask) {
|
||||
videoMem[videoMemIndex++] = 0x7F12A208;
|
||||
}
|
||||
else { // 28CD41
|
||||
videoMem[videoMemIndex++] = 0x00000000;
|
||||
}
|
||||
}
|
||||
// even
|
||||
for ( uint8_t bit = 0; bit < 7; bit++ ) {
|
||||
uint8_t bitMask = 1 << bit;
|
||||
|
||||
if (block.H & bitMask) {
|
||||
videoMem[videoMemIndex++] = 0x7F12A208;
|
||||
}
|
||||
else { // 28CD41
|
||||
videoMem[videoMemIndex++] = 0x00000000;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Instruction Implementations
|
||||
|
@ -146,7 +146,7 @@ extern uint8_t * const RAM;
|
||||
extern uint8_t * const MEM; // Pointer to the Shadow Memory Map so we can use this from Swift//extern uint8_t * AUX_VID_RAM;
|
||||
extern uint32_t * videoMemPtr;
|
||||
|
||||
extern void hires_Update(void);
|
||||
//extern void hires_Update(void);
|
||||
|
||||
extern double mips;
|
||||
extern double mhz;
|
||||
|
@ -18,7 +18,7 @@ INLINE void PUSH( uint8_t src ) {
|
||||
}
|
||||
|
||||
INLINE uint8_t POP() {
|
||||
return RDLOMEM[ stack_base_addr | ++m6502.SP ];
|
||||
return Apple2_64K_MEM[ stack_base_addr | ++m6502.SP ];
|
||||
}
|
||||
|
||||
|
||||
|
@ -17,8 +17,8 @@ disk_t disk = {
|
||||
0, // clk_since_last_read
|
||||
};
|
||||
|
||||
const int diskAccelerator_frames = 3;
|
||||
int diskAccelerator_count = 10;
|
||||
const int diskAccelerator_frames = 1;
|
||||
int diskAccelerator_count = 10000;
|
||||
int diskAccelerator_speed = 25; // less than actual CPU speed means no acceleration
|
||||
//const unsigned long long clk_6502_per_frm_diskAccelerator = 25 * M / fps; // disk acceleration bumps up CPU clock to 25 MHz
|
||||
//const unsigned long long clk_diskAcceleratorTimeout = 1000ULL;
|
||||
@ -45,6 +45,13 @@ const int position_to_direction[8][8] = {
|
||||
};
|
||||
|
||||
|
||||
void disk_accelerator_speedup() {
|
||||
if ( diskAccelerator_speed > clk_6502_per_frm ) {
|
||||
clk_6502_per_frm = diskAccelerator_speed * M / fps; // clk_6502_per_frm_diskAccelerator;
|
||||
diskAccelerator_count = diskAccelerator_frames;
|
||||
}
|
||||
}
|
||||
|
||||
void disk_phase() {
|
||||
|
||||
int position = magnet_to_Poistion[disk.phase.magnet];
|
||||
@ -64,12 +71,7 @@ void disk_phase() {
|
||||
// printf(", p:%d d:%d l:%d: ph:%u trk:%u)", position, direction, lastPosition, phase.count, woz_tmap.phase[phase.count]);
|
||||
|
||||
disk.clk_last_access = m6502.clktime;
|
||||
if ( diskAccelerator_speed > clk_6502_per_frm ) {
|
||||
// clk_6502_per_frm = clk_6502_per_frm_diskAccelerator;
|
||||
clk_6502_per_frm = diskAccelerator_speed * M / fps; // clk_6502_per_frm_diskAccelerator;
|
||||
diskAccelerator_count = diskAccelerator_frames;
|
||||
}
|
||||
|
||||
disk_accelerator_speedup();
|
||||
}
|
||||
else {
|
||||
// invalid magnet config
|
||||
@ -82,10 +84,7 @@ void disk_phase() {
|
||||
uint8_t disk_read() {
|
||||
dbgPrintf("io_DISK_READ (S%u)\n", 6);
|
||||
disk.clk_last_access = m6502.clktime;
|
||||
if ( diskAccelerator_speed > 2 ) {
|
||||
clk_6502_per_frm = diskAccelerator_speed * M / fps; // clk_6502_per_frm_diskAccelerator;
|
||||
diskAccelerator_count = diskAccelerator_frames;
|
||||
}
|
||||
disk_accelerator_speedup();
|
||||
|
||||
return woz_read();
|
||||
}
|
||||
|
@ -792,7 +792,7 @@ INLINE void ioWrite( uint16_t addr, uint8_t val ) {
|
||||
Naive implementation of RAM read from address
|
||||
**/
|
||||
INLINE uint8_t memread8_low( uint16_t addr ) {
|
||||
return RDLOMEM[addr];
|
||||
return Apple2_64K_MEM[addr];
|
||||
}
|
||||
INLINE uint8_t memread8_high( uint16_t addr ) {
|
||||
return RDHIMEM[addr];
|
||||
@ -808,7 +808,7 @@ INLINE uint8_t memread8( uint16_t addr ) {
|
||||
Naive implementation of RAM read from address
|
||||
**/
|
||||
INLINE uint16_t memread16_low( uint16_t addr ) {
|
||||
return * (uint16_t*) ( RDLOMEM + addr );
|
||||
return * (uint16_t*) ( Apple2_64K_MEM + addr );
|
||||
}
|
||||
INLINE uint16_t memread16_high( uint16_t addr ) {
|
||||
return * (uint16_t*) ( RDHIMEM + addr );
|
||||
|
Loading…
Reference in New Issue
Block a user