Add creation of .dat file by writing header and few machine codes
[zilutils.git] / zilasm / header.h
1 /*
2  * header.h -- part of ZilUtils/ZilAsm
3  *
4  * Copyright (C) 2016, 2019 Jason Self <j@jxself.org>
5  *
6  * This program is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU Affero General Public License as
8  * published by the Free Software Foundation, either version 3 of the
9  * License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU Affero General Public License for more details.
15  *
16  * You should have received a copy of the GNU Affero General Public License
17  * along with this program.  If not, see <http://www.gnu.org/licenses/>
18  *
19  * SPDX-License-Identifier: AGPL-3.0-or-later
20  */
21
22 #ifndef ZILASM_HEADER
23 #define ZILASM_HEADER 1
24
25 #include "zmem.h"
26
27 typedef unsigned long   Byte_address;
28 typedef unsigned long   Word_address;
29 typedef unsigned long Packed_address;
30 typedef unsigned long        Offset8;
31 typedef unsigned short          Word;
32 typedef unsigned char           Byte;
33 typedef          int            Bool;
34
35 //typedef struct {
36 //     unsigned version;  // 1..6
37 //     // [$01] V1..V3: Flags1
38 //     Bool  statusline_type;      // bit1: 0=score/turns, 1=hh:mm
39 //     Bool  split_two_discs;      // bit2
40 //     Bool  statusline_notavail;  // bit4
41 //     Bool  screensplit_avail;    // bit5
42 //     Bool  varpitchfont_default; // bit6
43 //     // [$01] V4: Flags1
44 //     Bool  colors_avail;         // v5: bit0
45 //     Bool  pics_avail;           // v6: bit1
46 //     Bool  bold_avail;           // v4: bit2
47 //     Bool  italic_avail;         // v4: bit3
48 //     Bool  fixedspace_avail;     // v4: bit4
49 //     Bool  sound_avail;          // v6: bit5
50 //     Bool  timedkeyb_avail;      // v4: bit7
51 //     // Addresses
52 //     Byte_address   highmem_base;  // [$04]
53 //     Byte_address   start_pc;      //  [$06], v1
54 //     Packed_address start_routine; //  [$06], v6
55 //     Byte_address   dictionary;    // [$08]
56 //     Byte_address   objects;       // [$0A]
57 //     Byte_address   globals;       // [$0C]
58 //     Byte_address   static_base;   // [$0E]
59 //     // [$10] Flags2
60 //     Bool  transcript_on;        // v1: bit0
61 //     Bool  print_fixedfont;      // v3: bit1
62 //     Bool  request_redraw;       // v6: bit2
63 //     Bool  want_pics;            // v5: bit3
64 //     Bool  want_undo;            // v5: bit4
65 //     Bool  want_mouse;           // v5: bit5
66 //     Bool  want_colors;          // v5: bit6
67 //     Bool  want_sound;           // v5: bit7
68 //     Bool  want_menus;           // v5: bit8
69 //     //
70 //     Byte_address  abbrevs;        // [$18], v2
71 //     Word  file_length;            // [$1A], v3
72 //     Word  checksum;               // [$1C], v3
73 //     Byte  interpreter_number;     // [$1E], v4
74 //     Byte  interpreter_version;    // [$1F], v4
75 //     // Screen
76 //     Byte  screen_lines;           // [$20], v4 ($FF = infinite)
77 //     Byte  screen_chars;           // [$21], v4
78 //     Word  screen_width;           // [$22], v5
79 //     Word  screen_height;          // [$24], v5
80 //     Byte  font_width;             // [$26], v5/v6
81 //     Byte  font_height;            // [$27], v5/v6
82 //     // Tables
83 //     Offset8  routines;            // [$28], v6
84 //     Offset8  strings;             // [$2A], v6
85 //     Byte     backcolor;           // [$2C], v5
86 //     Byte     forecolor;           // [$2D], v5
87 //     Byte_address  term_chartable; // [$2E], v5
88 //     Word     width3;              // [$30], v6
89 //     Word     revnumber;           // [$32], v1
90 //     Byte_address  alphabet;       // [$34], v5
91 //     Byte_address  header_ext;     // [$36], v5
92 //} Program_header_struct;
93
94
95 enum MODE_FLAGS
96 {
97        COLOR_AVAILABLE = 0,
98        DISPLAY_AVAILABLE = 1,
99        BOLD_AVAILABLE = 2,
100        ITALIC_AVAILABLE = 4,
101        MONOSPACE_AVAILABLE = 8
102 };
103
104 typedef struct {
105        Byte version;  // 1..6
106        Byte mode;
107        Word release;
108        Word resident_size;
109        Word startPC;
110        Word dictionaryTableOffset;
111        Word objectsTableOffset;
112        Word globalsTableOffset;
113        Word dynamic_size;
114        Word flags;
115        unsigned char serial[6];
116        Word h_abbreviations;
117        Word h_file_size;
118        Word checkSum;
119        unsigned char interpreterNumber;
120        unsigned char interpreterVersion;
121        unsigned char H_SCREEN_ROWS;
122        unsigned char H_SCREEN_COLS;
123        Word H_SCREEN_WIDTH;
124        Word H_SCREEN_HEIGHT;
125        unsigned char H_FONT_HEIGHT; /* this is the font width in V5 */
126        unsigned char H_FONT_WIDTH; /* this is the font height in V5 */
127        Word H_FUNCTIONS_OFFSET;
128        Word H_STRINGS_OFFSET;
129        unsigned char H_DEFAULT_BACKGROUND;
130        unsigned char  H_DEFAULT_FOREGROUND;
131        Word H_TERMINATING_KEYS;
132        Word H_LINE_WIDTH;
133        unsigned char  H_STANDARD_HIGH;
134        unsigned char H_STANDARD_LOW;
135        Word H_ALPHABET;
136        Word H_EXTENSION_TABLE;
137        char USER_NAME[8];
138 } Program_header_struct;
139
140 extern Program_header_struct Program_header;
141
142 void program_header_reset(unsigned zversion);
143 ZMemblock *program_header_build(void);
144
145 typedef struct {
146        Byte numberOfSelfinseringCharacters;
147        Byte *pSymbols;
148        Byte numberOfBytesInEachEntry;
149
150 } Program_dictionary_struct ;
151
152
153
154 void outputToFile(Program_header_struct *h, FILE* file);
155
156 #endif  /* ifndef ZILASM_HEADER */