mirror of
https://codeberg.org/hkzlab/TK2048.git
synced 2026-01-12 06:33:04 +11:00
Merged dii_refactoring, modularize code for 2.0
This commit is contained in:
parent
5d739383aa
commit
cfc455f1ca
37 changed files with 2101 additions and 249 deletions
46
src/disk2.h
Normal file
46
src/disk2.h
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
#ifndef _DISK2_HEADER_
|
||||
#define _DISK2_HEADER_
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#define DII_MAX_TRACK 96
|
||||
#define DECODING_MAPPING_TABLE_DEFAULT_ADDRESS 0x0356
|
||||
#define ENCODING_MAPPING_TABLE_DEFAULT_ADDRESS 0x9D56
|
||||
#define WRITE_SIXES_BUFFER_DEFAULT_ADDRESS 0x9C00
|
||||
#define WRITE_TWOS_BUFFER_DEFAULT_ADDRESS 0x9D00
|
||||
|
||||
void dii_generate_6bit_decoding_mapping_table(uint8_t* dest);
|
||||
void dii_generate_6bit_encoding_mapping_table(uint8_t* dest);
|
||||
void dii_encode_gcr62_data(uint8_t *src, uint8_t* dest6, uint8_t* dest2);
|
||||
void dii_power_on(uint8_t io_offset, uint8_t drive_no);
|
||||
void dii_power_off(uint8_t io_offset);
|
||||
void dii_head_reposition(uint8_t io_offset, uint8_t cur_track, uint8_t dest_track);
|
||||
|
||||
/**
|
||||
* Patch the dii_write_sector routine to change the memory addresses used.
|
||||
* buf2 and buf6 must start at the beginning of a memory page, nibtab must fit completely inside a page.
|
||||
*/
|
||||
void dii_patch_write(uint8_t* buf6, uint8_t* buf2, uint8_t *nibtab);
|
||||
|
||||
/**
|
||||
* This routine requires the decoding mapping table to be initialized beforehand at
|
||||
* DECODING_MAPPING_TABLE_DEFAULT_ADDRESS, and uses space in page 3 as a buffer
|
||||
*
|
||||
* If the return value is 0, the read failed
|
||||
*/
|
||||
uint8_t dii_read_sector(uint8_t io_offset, uint8_t track, uint8_t sector, uint8_t *buffer, uint8_t aonly);
|
||||
|
||||
/**
|
||||
* Writes gcr 6+2 encoded data to the chosen sector. The track number is used to verify that we're on the correct
|
||||
* track before writing. This routine does not move the head.
|
||||
* The data must be pre-encoded.
|
||||
*
|
||||
* By default, it writes 86 bytes from the "twos" buffer located at 0x9C00, 256 bytes of "sixes" from the buffer
|
||||
* at 0x9D00 and using a 63 entries translation table preloaded at 0x9C56.
|
||||
* If these addresses need to be changes, use the dii_patch_write routine.
|
||||
*
|
||||
* If the return value is > 0, the write failed
|
||||
*/
|
||||
uint8_t dii_write_sector(uint8_t io_offset, uint8_t track, uint8_t sector);
|
||||
|
||||
#endif /* _DISK2_HEADER_ */
|
||||
Loading…
Add table
Add a link
Reference in a new issue