From 1c01bbaa6998ee3ef915f286fe980286c272d1ea Mon Sep 17 00:00:00 2001 From: imi415 Date: Tue, 30 Aug 2022 00:00:48 +0800 Subject: [PATCH] Initial apple generator. --- Gemfile | 7 +++++++ Gemfile.lock | 13 +++++++++++++ apple_ssd1327.rb | 34 ++++++++++++++++++++++++++++++++++ apple_st75256.rb | 34 ++++++++++++++++++++++++++++++++++ 4 files changed, 88 insertions(+) create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 apple_ssd1327.rb create mode 100644 apple_st75256.rb diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..f4252f6 --- /dev/null +++ b/Gemfile @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +# gem "rails" + +gem 'rmagick', '~>4' \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..411824c --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,13 @@ +GEM + remote: https://rubygems.org/ + specs: + rmagick (4.2.4) + +PLATFORMS + x86_64-linux + +DEPENDENCIES + rmagick (~> 4) + +BUNDLED WITH + 2.3.3 diff --git a/apple_ssd1327.rb b/apple_ssd1327.rb new file mode 100644 index 0000000..db8afe5 --- /dev/null +++ b/apple_ssd1327.rb @@ -0,0 +1,34 @@ +require 'bundler' + +Bundler::require + +require 'rmagick' +include Magick + +IMAGE_DIR='video/128_128' +OUTPUT_NAME='video/128_128/apple.bin' + +COLOR_STEP=(Magick::QuantumRange + 1) / 16 + +def convert_image(filename) + im = Image.read(filename) + pix_ary = Array.new(8192, 0) + im[0].each_pixel do |pix, col, row| + if col.even? then # Low nibble + pix_ary[row * 64 + col / 2] &= 0xF0 + pix_ary[row * 64 + col / 2] |= pix.intensity / COLOR_STEP + else # High nibble + pix_ary[row * 64 + col / 2] &= 0x0F + pix_ary[row * 64 + col / 2] |= (pix.intensity / COLOR_STEP) << 4 + end + end + pix_ary +end + +File.open(OUTPUT_NAME, "w+") do |f| + Dir.glob("#{IMAGE_DIR}/*.bmp").each_with_index do |img, i| + puts "#{i} image processed." + f.write(convert_image(img).pack("C*")) + end +end + diff --git a/apple_st75256.rb b/apple_st75256.rb new file mode 100644 index 0000000..6e8c87c --- /dev/null +++ b/apple_st75256.rb @@ -0,0 +1,34 @@ +require 'bundler' + +Bundler::require + +require 'rmagick' +include Magick + +IMAGE_DIR='video/256_128' +OUTPUT_NAME='video/256_128/apple_st75256.bin' + +COLOR_STEP=(Magick::QuantumRange + 1) / 4 + +def convert_image(filename) + im = Image.read(filename) + pix_ary = Array.new(8192, 0) + im[0].each_pixel do |pix, col, row| + color = pix.intensity / COLOR_STEP + + byte_offset = 256 * (row / 4) + col + bit_offset = (3 - (row % 4)) * 2 + + pix_ary[byte_offset] &= ~(3 << bit_offset) + pix_ary[byte_offset] |= (color << bit_offset) + end + pix_ary +end + +File.open(OUTPUT_NAME, "w+") do |f| + Dir.glob("#{IMAGE_DIR}/*.bmp").each_with_index do |img, i| + puts "#{i} image processed." + f.write(convert_image(img).pack("C*")) + end +end +