Ben Eater 6502 Kit — Day 11
(Edited)
Up until now the 65C02 was only supplied with NOP operation. Including the reset and interrupt vectors making the CPU start execution at EAEA₁₆ while the first address of the ROM is 8000₁₆ which would also be the correct place to start the program.
So I updated the Ada program which generates the ROM image with so that the reset and interrupt vectors are all filled with 8000₁₆. Do read the comments for more informations on this over engendered code.
with Ada.Sequential_IO;
with Ada.IO_Exceptions;
with Ada.Command_Line;
with Ada.Text_IO;
with Interfaces;
procedure Create_Reset is
type Byte is new Interfaces.Unsigned_8;
type Address is new Interfaces.Unsigned_16;
-- One of the cool feature of Ada is it's ability to set the lower and
-- upper bound of an array to any value you want. So we can set use the
-- actual ROM addresses as array index an save ourself the work and
-- remove one potential error source.
--
type ROM_Type is
array (Address range 16#8000# .. 16#FFFF#)
of Byte;
package ROM_IO is new Ada.Sequential_IO (ROM_Type);
ROM_Output : ROM_IO.File_Type;
-- 65C02 related constants as named in the original
-- WDC design document
--
NOP : constant Byte := 16#EA#;
NMIB : constant Address := 16#FFFA#;
RESB : constant Address := 16#FFFC#;
BRK_IRQB : constant Address := 16#FFFE#;
-- Another interesting feature Ada arrays is specifying the index of
-- elements when initialising the array. As well specifying an value
-- for all not explicitly initialised values. Makes setting up the
-- ROM array super easy.
--
ROM : constant ROM_Type :=
(NMIB + 0 => 16#00#,
NMIB + 1 => 16#80#,
RESB + 0 => 16#00#,
RESB + 1 => 16#80#,
BRK_IRQB + 0 => 16#00#,
BRK_IRQB + 1 => 16#80#,
others => NOP);
begin
if Ada.Command_Line.Argument_Count < 1 then
Ada.Text_IO.Put_Line ("Syntax: Create_Reset <output file>");
else
declare
File_Name : constant String := Ada.Command_Line.Argument (1);
begin
ROM_IO.Create (ROM_Output, ROM_IO.Out_File, File_Name);
exception
when Ada.IO_Exceptions.Name_Error =>
Ada.Text_IO.Put_Line ("File “" & File_Name & "” couldn't be created.");
Ada.Text_IO.Put_Line ("See stack trace below for more details.");
raise;
end;
-- Just like Python Ada can write the whole array in one go.
--
ROM_IO.Write (ROM_Output, ROM);
ROM_IO.Close (ROM_Output);
end if;
end Create_Reset;
Write the ROM image
Test using the Arduino
You find the full source code with makefiles, project files and source on GitLab: 6502Tutorial — Tools/Create_Reset
vintage-computing
palnet
stem
programming
computing
computer-hardware
computer-science
vintagecomputing
computerhardware
computerscience
0
0
0.000
Congratulations @krischik! You have completed the following achievement on the Hive blockchain and have been rewarded with new badge(s) :
You can view your badges on your board and compare yourself to others in the Ranking
If you no longer want to receive notifications, reply to this comment with the word
STOP